有没有办法Where在两个字符串字段的串联上创建一个lambda,这样它才能在SQL中正确执行?说我有一个人,有两个领域,FirstName和LastName.我希望能够按照其全名进行过滤,该名称在页面上显示为FirstName + LastName.
我不能使用FullNamelinq lambda中的组合属性,因为SQL不知道它是什么,并抛出错误.我可以先使用它来运行查询.AsEnumerable(),Where但效率较低(我认为?)
我试过.Where(p => (p.FirstName + p.LastName).Contains(filterText)),这运行没有错误,但它实际上只能一次过滤一个.这就像生成的sql所说WHERE FirstName LIKE %text% OR LastName LIKE %text%,而不是搜索连接.这意味着我不能让我的过滤器文本跨越名字和姓氏.如果我搜索"hn Do"的"John Doe",我没有得到任何结果.
那么在LINQ中是否有正确的方法可以做到这一点,还是我必须解决备用解决方案?
尝试:
.Where(p => (p.FirstName + " " + p.LastName).Contains(filterText))
Run Code Online (Sandbox Code Playgroud)
否则,你正在检查"hn Do"对抗"JohnDoe",这当然是不匹配的.
它不是LINQ to SQL中的错误.您的查询非常清楚地询问您不想要的预期行为.
使用LINQPad可以很容易地看到LINQ查询生成的SQL.对于原始查询,它会生成如下内容:
DECLARE @p0 NVarChar(1000) = '%hn Do%'
SELECT [t0].[PersonId], ...
FROM [Person] AS [t0]
WHERE ([t0].[FirstName] + [t0].[LastName]) LIKE @p0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |