Я пытаюсь создать api asp.net с помощью Entity Framework MySql
(IQueryable).where(b=>(((fliter ^ b.BlogStatus) & mask) == 0));
error = System.InvalidOperationException: Unsupported Binary operator type specified.
Но EOR (^) не работает Я не мог найти решение для этого, поэтому решил не использовать "EOR"
(IQueryable).where(b=>(((fliter | b.BlogStatus) & ~(fliter & b.BlogStatus)) & mask) == 0);
// x^y == (x|y) & ~(x&y)
error = MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT (0 & 'b'.'BlogStatus')) & 7) = 0
Но НЕ (~) не работает Я не мог найти решение для этого, поэтому решил не использовать "НЕ"
(IQueryable).where(b=>(((fliter | b.BlogStatus) & (2147483647-(fliter & b.BlogStatus))&mask)) == 0);
// ~x == 2147483647-x
Удивительно, но работает, но только локально.
(Извините за мой плохой английский)
Может быть, попробовать не как однострочную лямбду, а как анонимную функцию с {и} вместо этого? Это связано с тем, что поставщики LINQ обычно превращают LINQ в дерево выражений, а затем преобразуют его в базовый SQL для выполнения. Однако C# не превращает анонимные функции с телом в деревья выражений (а скорее в выражение вызова метода). Из-за вашей ошибки я думаю, что вы попали в ситуацию неподдерживаемого перевода. Я думаю, что если поместить виновных операторов в {}, это может помочь переводчику решить эту проблему. Надеюсь, это поможет!