Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
Linq to Entity框架where子句的参数变量_Linq_Linq To Entities - Fatal编程技术网

Linq to Entity框架where子句的参数变量

Linq to Entity框架where子句的参数变量,linq,linq-to-entities,Linq,Linq To Entities,我有这样一个问题: var labs=context.vw_Lab_Space.AsNoTracking() .Where(lab=>lab.lab_Name.ToLower().Contains(text)| | lab.lab_Owner_Name.ToLower().Contains(text) ||lab.lab_Owner_Email.ToLower()包含(文本)| | lab.Region_Code.ToLower()包含(文本) ||lab.Country_Code.ToLowe

我有这样一个问题:

var labs=context.vw_Lab_Space.AsNoTracking()
.Where(lab=>lab.lab_Name.ToLower().Contains(text)| | lab.lab_Owner_Name.ToLower().Contains(text)
||lab.lab_Owner_Email.ToLower()包含(文本)| | lab.Region_Code.ToLower()包含(文本)
||lab.Country_Code.ToLower()包含(文本)| | lab.Country_Name.ToLower()包含(文本)
||lab.Site_Code.ToLower()包含(文本)| | lab.Site_Name.ToLower()包含(文本)
||lab.Building_Code.ToLower()包含(文本)| | lab.Building_Name.ToLower()包含(文本))
这可以正确编译/运行。我在多个地方执行相同的查询,所以我想我应该提取该查询。如果我这样做:

Func whereQuery=lab=>lab.name。。。。。
var labs=context.vw_Lab_Space.AsNoTracking()
.何处(何处查询)
然后它编译得很好,但是我得到一个运行时错误,说没有设置对象。为什么我不能提取那个查询


在更大的方案中,where子句要复杂得多,因此我想将逻辑提取到一个返回该类型内容的函数中,这样就可以在不反复重复相同代码的情况下使用它。

据我理解,问题不在于提取谓词以使其可重用,但我认为这与你从哪里调用它有关。正如您所提到的,您在表示未设置对象时遇到错误,您确定所涉及的对象均为空吗?如果您使用LINQ to实体,则需要使用
查询表。其中
采用
表达式
,而非
函数
,因为
Func
是编译代码,提供程序无法将其转换为SQL。将
whereQuery
的类型更改为
Expression
。谢谢@NetMage。这就是问题所在。