在带有Join子句的linq的multiple where子句中使用Trim
本文关键字:子句 Trim where linq Join multiple | 更新日期: 2023-09-27 18:26:43
我的表中有一列有间距。我正试图使用linq查询它,但我遇到了一个错误。代码为:
(from t1 in table1
join t2 in table2
on t1.t2_Id equals t2.Id
where t1.status == "Active"
where t2.column_value.Trim() == parameter
select t1).ToList();
错误为:
"where"条件无效。实体成员正在调用无效的属性或方法。
如何修剪立柱?
您需要这样做。要加入条件,您需要根据自己的要求使用&&
或||
。
from t1 in table1
join t2 in table2
on t1.t2_Id equals t2.Id
where t1.status == "Active"
&& t1.column_value.Trim() == parameter
select t1).ToList();
问题是.Trim()
无法在服务器端执行。你可以从错误中看到这一点
"where"条件无效。实体成员正在调用无效的属性或方法。
并且Trim()
是唯一被调用的属性或方法。我知道SQL Server应该能够处理Trim(),但不是每个提供程序都能(UPDATE:已确认该提供程序是CRM Linq提供程序)。
你可以使用
(from t1 in table1
join t2 in table2
on t1.t2_Id equals t2.Id
where t1.status == "Active"
select t1).AsEnumerable().Where(r => r.column_value.Trim() == parameter)
.ToList();
AsEnumerable()导致Linq表达式的其余部分在客户端执行,而不是在数据库中执行。这种方法的一个问题是,您很可能会从数据库中检索到比最终使用的更多的记录,因为有些过滤是客户端的。