【发布时间】:2019-09-30 09:54:02
【问题描述】:
我正在尝试简化返回 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));
但这不能编译:'方法名称预期'。 有没有办法完成我想做的事情?
【问题讨论】:
-
我的眼睛无法编译这个
x => x.A.<MyProperty> == 1。你确定你的出发点吗? -
也许我过于简化了。我用枚举更新了我的问题,现在更有意义了吗?
-
使用谓词构建器。例如this one.
-
过早优化是问题的根源。
-
@NKosi 你能详细说明一下吗?
标签: c# .net entity-framework linq entity-framework-6