Я пытаюсь упростить метод, который возвращает IQueryable
A, B и C, расширяют BaseEntity, содержащий перечисление, которое я хочу сравнить. context является структурой сущности dbcontext.
Вот упрощенная версия метода:
return context.MyEntities.Include("A").Include("B").Include("C")
.Where(x => x.A.MyEnum == MyEnum.<value> && x.B.MyEnum == MyEnum.<value> && x.C.MyEnum == MyEnum.<value>);
Я пытался сделать это:
Func<BaseEntity, bool> equals = x => x.MyEnum == MyEnum.<value>;
return context.MyEntities.Include("A").Include("B").Include("C")
.Where(x => equals(x.A) && equals(x.B) && equals(x.C));
Он компилируется, нодает ошибку во время выполнения. Насколько я понимаю, что Linq не может перевести func <> в SQL? Поэтому я искал и обнаружил, что вам нужно обернуть func <> в выражение <>, чтобы Linq мог скомпилировать его и преобразовать в SQL.
Теперь у меня есть это:
Expression<Func<BaseEntity, bool>> equals = x => x.MyEnum == MyEnum.<value>;
return context.MyEntities.Include("A").Include("B").Include("C")
.Where(x => equals(x.A) && equals(x.B) && equals(x.C));
Но это не компилируется: «Ожидается имя метода». Есть ли способ выполнить то, что я пытаюсь сделать?