C# 使用表达式<;Func<;MyEntity,bool>&燃气轮机;在我的生命之林。<;其他实体>&书信电报;MyProperty>;
我试图简化一个返回IQueryable的方法 A、 B和C扩展包含我要比较的枚举的BaseEntity。 context是一个实体框架dbcontext 以下是该方法的精简版本:C# 使用表达式<;Func<;MyEntity,bool>&燃气轮机;在我的生命之林。<;其他实体>&书信电报;MyProperty>;,c#,.net,entity-framework,linq,entity-framework-6,C#,.net,Entity Framework,Linq,Entity Framework 6,我试图简化一个返回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.<
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>);
返回context.myenties.Include(“A”).Include(“B”).Include(“C”)
其中(x=>x.A.MyEnum==MyEnum.&x.B.MyEnum==MyEnum.&x.C.MyEnum==MyEnum.);
我试着这样做:
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));
Func=x=>x.MyEnum==MyEnum。;
返回上下文.MyEntities.Include(“A”).Include(“B”).Include(“C”)
其中(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.MyEnum==MyEnum。;
返回上下文.MyEntities.Include(“A”).Include(“B”).Include(“C”)
其中(x=>equals(x.A)&&equals(x.B)&&equals(x.C));
但这不会编译:“应该是方法名”。
有什么方法可以完成我想做的吗?编译错误是因为必须先编译表达式,然后才能调用它
equals.Compile()(x.A)
但这违背了最初使用表达式的目的
在提供的代码中,除了将重复的值调用移动到变量中之外,没有什么可以简化的
var value = MyEnum.<value>;
return context.MyEntities.Include("A").Include("B").Include("C")
.Where(x => x.A.MyEnum == value && x.B.MyEnum == value && x.C.MyEnum == value);
var value=MyEnum。;
返回上下文.MyEntities.Include(“A”).Include(“B”).Include(“C”)
其中(x=>x.A.MyEnum==value&&x.B.MyEnum==value&&x.C.MyEnum==value);
实际上并不需要简化所显示的内容。我的眼睛无法编译此
x=>x.A.==1
。你确定你的出发点吗?也许我过于简化了。我用枚举更新了我的问题,现在它更有意义了吗?使用谓词生成器。例如,过早的优化是您问题的根源。@NKosi您能详细说明一下吗?我同意,记住给定的代码。但是,出于学习目的,我的想法可能吗?