C# 在linq的多个where子句中使用Trim和Join子句

C# 在linq的多个where子句中使用Trim和Join子句,c#,.net,linq,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(); 错误是: 无效的“where”条件。实体成员正在调用无效的 属性或方法 如何修剪立柱?您需要这样做。要加入条件,您

我表格中的一列有空格。我试图使用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(),但不是每个提供程序都可以(更新:已确认该提供程序是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表达式的其余部分在客户端执行,而不是在数据库中执行。这种方法的一个问题是,您很可能从数据库中检索到比最终使用的更多的记录,因为一些筛选是客户端的。

Can Trim()执行服务器端?@EricJ.,它将转换为
RTRIM(LTRIM(
使用SQL调用实体框架Server@Habib:这不是SQL Server,错误表明提供程序无法处理表达式中的某些属性或方法。@EricJ.,我错过了问题中的错误文本。我必须承认,这可能是我第一次看到
Trim
失败。@EricJ.在这些错误中案例通常不支持错误例外:EF无法识别x…这是哪种类型的LINQ?对于实体?错误消息通常与CRM LINQ提供程序关联。您正在使用它吗?根据下面的评论,这是使用CRM LINQ提供程序,可能是,它的CRM LINQ提供程序。当然允许使用多个
其中
谢谢你,Eric,但是我不能从这里访问属于t2的列。\u值。+1,因为在偶数LINQ to对象中有多个where子句并不是我最初猜测的错误。@MikeStrobel:我打赌他使用的是CRM LINQ提供程序。试着用谷歌搜索他的错误消息“实体成员正在调用无效的属性或方法。”@EricJ事实上,我刚刚看到你的评论,暗示你毕竟是对的。