Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# 在Predicatebuilder中使用.Equals()失败_C#_Linq To Entities_Predicatebuilder - Fatal编程技术网

C# 在Predicatebuilder中使用.Equals()失败

C# 在Predicatebuilder中使用.Equals()失败,c#,linq-to-entities,predicatebuilder,C#,Linq To Entities,Predicatebuilder,您好,我正在使用谓词生成器构建我的where子句。 我注意到它正在与实体数据源进行区分大小写的比较。一些快速的谷歌搜索暗示这是linqtoentities的一个特点。所以我不得不修改我的代码来做 whereClause = whereClause.And(x => x.county.Equals(oSearch.County, StringComparison.OrdinalIgnoreCase )); 而不是以前那样做 whereClause = whereClause.And(x =

您好,我正在使用谓词生成器构建我的where子句。 我注意到它正在与实体数据源进行区分大小写的比较。一些快速的谷歌搜索暗示这是linqtoentities的一个特点。所以我不得不修改我的代码来做

whereClause = whereClause.And(x => x.county.Equals(oSearch.County, StringComparison.OrdinalIgnoreCase ));
而不是以前那样做

whereClause = whereClause.And(x => x.county == oSearch.County);
现在的问题是,它似乎无法构建where条款

顺便说一句,我正在使用下面的代码,这是以前的工作

var tbl = db.tbl_members.AsExpandable().Where(whereClause.Compile());
我有一段代码,它执行foreach(模型中的var项),现在由于“对象引用未设置为对象的实例”而失败 如果我使用“快速查看”检查模型,它现在会显示以下内容

tblMembers = {System.Linq.Enumerable.WhereEnumerableIterator<tbl_members>}

不管是否有任何结果,它都会显示出来。

问题是linq有翻译

whereClause = whereClause.And(x =>
x.county.Equals(oSearch.County,StringComparison.OrdinalIgnoreCase )
在sql中。您可以尝试:

whereClause = whereClause.And(x => x.county.ToLower()==oSearch.County.ToLower());

问题是linq有翻译

whereClause = whereClause.And(x =>
x.county.Equals(oSearch.County,StringComparison.OrdinalIgnoreCase )
在sql中。您可以尝试:

whereClause = whereClause.And(x => x.county.ToLower()==oSearch.County.ToLower());
鉴于此:

tblMembers = {System.Linq.Enumerable.WhereEnumerableIterator<tbl_members>}
这是将表达式树编译为委托,然后调用
Enumerable.Where
。没有
Compile()
调用:

var tbl = db.tbl_members.AsExpandable().Where(whereClause);
。。。我们最终使用表达式树调用
Queryable.Where
,然后可以将表达式树转换为SQL。

鉴于以下情况:

tblMembers = {System.Linq.Enumerable.WhereEnumerableIterator<tbl_members>}
这是将表达式树编译为委托,然后调用
Enumerable.Where
。没有
Compile()
调用:

var tbl = db.tbl_members.AsExpandable().Where(whereClause);


。。。我们最终使用表达式树调用
Queryable.Where
,然后可以将其转换为SQL。

看起来是这样的吗?实际上发生了什么?之前的工作代码抛出一个空异常,当我检查tbl对象时,没有返回任何数据。它在哪里抛出异常?请提供我们可能需要的所有信息。。。请参见“确定”在调试模式下检查结果,它似乎返回了不同类型的结果。以前,无论我是否有任何结果,我都可以执行foreach(模型中的var项),但现在它抛出一个未设置为对象实例的对象变量,quickview中的对象显示base{System.Linq.Enumerable.Iterator}={System.Linq.Enumerable.whereEnumerableTerator}而不是Model={选择[Extent1].[id]作为[id],[Extent1].[membership_id]作为[membership_id],…再说一次,您并没有真正向我们提供您所拥有的所有信息。请阅读该链接并编辑您的问题。它似乎是?实际发生了什么?以前的工作代码引发了一个空异常,当我检查tbl对象时,没有返回任何数据。它在哪里引发异常?请向我们提供所有信息我们可能需要…查看ok在调试模式下检查结果,它似乎会返回不同类型的结果。以前,无论我是否有任何结果,我都可以执行foreach(模型中的var项),但现在它会抛出一个未设置为对象实例的对象变量,并且quickview中的对象显示为base{System.Linq.Enumerable.Iterator}={System.Linq.Enumerable.WhereEnumerableIterator}而不是Model={选择[Extent1].[id]作为[id],[Extent1].[membership_id]作为[membership_id],…再说一次,您并没有真正向我们提供您所拥有的所有信息。请阅读该链接并编辑您的问题。如果我只是针对where使用该语法,它的predicatebuilder似乎不喜欢它。顺便说一句,该解决方法不是一个真正有效的解决方案,因为它会导致生成的sql不使用索引。此语法如果我只是针对where使用它,它的predicatebuilder似乎不喜欢它。顺便说一句,该解决方案不是一个真正有效的解决方案,因为它会导致生成的sql不使用索引。我使用LinqKit.dll并将我的查询实例化为var whereClause=LinqKit.predicatebuilder.True();抱歉,我不知道如何检查它是否使用表达式treesSystem.Linq.Expressions.expression=System.Linq.Expressions。Expression@Tim:好的,听起来像是在使用表达式树……什么是
AsExpandable()
?在本文档中,他似乎说这是linq to实体所必需的。@蒂姆:您已经展示了调试器为
tblMembers
显示的内容,但您还没有告诉我们这些内容的来源……您能提供更多信息吗?我正在使用LinqKit.dll,并将我的查询实例化为var whereClause=LinqKit.PredicateBuildr、 True();抱歉,我不知道如何检查它是否使用表达式treesSystem.Linq.Expressions.expression=System.Linq.Expressions。Expression@Tim:好的,听起来像是在使用表达式树……什么是
AsExpandable()
?在本文档中,他似乎说这是linq to实体所必需的。@蒂姆:您已经展示了调试器为
tblMembers
显示的内容,但您还没有告诉我们这是从哪里来的……您能提供更多信息吗?