Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用表达式<;Func<;MyEntity,bool>&燃气轮机;在我的生命之林。<;其他实体>&书信电报;MyProperty>;_C#_.net_Entity Framework_Linq_Entity Framework 6 - Fatal编程技术网

C# 使用表达式<;Func<;MyEntity,bool>&燃气轮机;在我的生命之林。<;其他实体>&书信电报;MyProperty>;

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.<

我试图简化一个返回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>);
返回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您能详细说明一下吗?我同意,记住给定的代码。但是,出于学习目的,我的想法可能吗?