inv*_*pid 7 sql linq contains linq-to-sql sql-like
我正在尝试使用||编写linq-to-sql查询 当与LIKE/Contains结合使用时,其行为与SQL中的OR相同.
SQL:
SELECT * FROM Users
WHERE GroupNumber = 'A123456'
OR (FirstName LIKE 'Bob%' AND LastName LIKE 'Smith%')
Run Code Online (Sandbox Code Playgroud)
这将导致每个人的名字像"Bob Smith"以及GroupNumber等于A123456的每个人.在我的数据库中,sql示例给出了三个结果(所需的结果):
A123456 John Davis A312345 Bob Smith A123456 Matt Jones
Linq :(提供PNum = A123456; first ="Bob"; last ="Smith")
var users = from a in dc.Users
where a.PolicyNumber == PNum || (SqlMethods.Like(a.FirstName, first + "%") && SqlMethods.Like(a.LastName, last + "%"))
orderby a.PolicyNumber, a.FirstName
select a;
Run Code Online (Sandbox Code Playgroud)
这只会给我在||左侧的结果:
A123456 John Davis A123456 Matt Jones
我也试过a.Contains()和a.StartsWith(),但是每个版本我得到相同的两个结果.当我删除任何Like/Contain/StartsWith时,我得到了所需的结果,但我需要通配符.如何在Linq查询中获得所有三个结果?
在这种情况下我肯定会使用StartsWith
,只是为了让代码在阅读时更像 C# - 但这应该有效:
var users = from a in dc.Users
where a.PolicyNumber == PNum
|| (a.FirstName.StartsWith(first) && a.LastName.StartsWith(last))
orderby a.PolicyNumber, a.FirstName
select a;
Run Code Online (Sandbox Code Playgroud)
如果该查询不起作用,您可以发布它生成的 SQL 吗?只需设置上下文的日志以将其写入控制台,或者其他最简单的方法。(我会编写一个控制台应用程序只是为了测试这个问题 - 它比每次运行 UI 更容易。)
归档时间: |
|
查看次数: |
595 次 |
最近记录: |