Boo*_*oog 26 .net c# linq linq-to-sql
我遇到了linq-to-sql的一个相当奇怪的问题.在以下示例中,
var survey = (from s in dbContext.crmc_Surveys
where (s.crmc_Retail_Trade_Id == tradeId) && (s.State_.Equals(state))
select s).First();
Run Code Online (Sandbox Code Playgroud)
如果tradeId为null,则其行为不像我特意指定null那样,
var survey = (from s in dbContext.crmc_Surveys
where (s.crmc_Retail_Trade_Id == null) && (s.State_.Equals(state))
select s).First();
Run Code Online (Sandbox Code Playgroud)
这是我想要的行为.事实上,除非两个值都为非null,否则它不会返回任何内容.我无法弄清楚如何完成这几个不同的linq查询.有任何想法吗?
jba*_*all 33
更改where (s.crmc_Retail_Trade_Id == tradeId)
到
where (s.crmc_Retail_Trade_Id == tradeId ||
(tradeId == null && s.crmc_Retail_Trade_Id == null))
Run Code Online (Sandbox Code Playgroud)
编辑 - 根据Brant Lamborn的这篇文章,看起来以下会做你想要的:
where (object.Equals(s.crmc_Retail_Trade_Id, tradeId))
Run Code Online (Sandbox Code Playgroud)
该null语义(LINQ到SQL) MSDN页面链接到一些有趣的信息:
LINQ to SQL没有对SQL强加C#null或Visual Basic没有比较语义.比较运算符在语法上被翻译为它们的SQL等价物.语义反映了服务器或连接设置定义的SQL语义.在默认SQL Server设置下,两个空值被视为不相等(尽管您可以更改设置以更改语义).无论如何,LINQ to SQL不考虑查询转换中的服务器设置.
与文字null(无)的比较被转换为适当的SQL版本(为null或不为null).
排序规则中null(nothing)的值由SQL Server定义; LINQ to SQL不会更改排序规则.
| 归档时间: |
|
| 查看次数: |
44785 次 |
| 最近记录: |