在带有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"条件无效。实体成员正在调用无效的属性或方法。

如何修剪立柱?

在带有Join子句的linq的multiple where子句中使用Trim

您需要这样做。要加入条件,您需要根据自己的要求使用&&||

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表达式的其余部分在客户端执行,而不是在数据库中执行。这种方法的一个问题是,您很可能会从数据库中检索到比最终使用的更多的记录,因为有些过滤是客户端的。