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

时间:2014-10-15 19:22:54

标签: c# .net linq

我桌子的其中一列有间距。我试图使用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();

错误是:

  

无效'其中'条件。实体成员正在调用无效   财产或方法。

如何修剪色谱柱?

2 个答案:

答案 0 :(得分:2)

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

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();

答案 1 :(得分:2)

问题是.Trim()无法在服务器端执行。您可以从错误

中看到这一点
  

无效'其中'条件。实体成员正在调用无效的属性或方法。

并且Trim()是唯一调用的属性或方法。我知道SQL Server应该能够处理Trim(),但不是每个提供者都可以(更新:确认提供者是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表达式的其余部分在客户端而不是在数据库中执行。这种方法的一个问题是,您很可能从数据库中检索的记录多于最终使用的记录,因为某些过滤是客户端的。