当前位置: 首页 > 编程语言 > C#

Linqwherecolumn==(nullreference)isdifferentfromcolumn==null分享

时间:2023-04-10 12:36:35 C#

Linqwherecolumn==(nullreference)isdifferentfromcolumn==null的问题。在以下示例中,varsurvey=(fromsindbContext.crmc_Surveyswhere(s.crmc_Retail_Trade_Id==tradeId)&&(s.State_.Equals(state))selects).First();如果tradeId为null,其行为不像我专门指定的null,varsurvey=(fromsindbContext.crmc_Surveyswhere(s.crmc_Retail_Trade_Id==null)&&(s.State_.Equals(state))selects)。第一的();这是我想要的行为。事实上,它不会返回任何东西,除非两个值都非空。我不知道如何完成这几个不同的linq查询。有任何想法吗?其中(s.crmc_Retail_Trade_Id==tradeId)更改为where(s.crmc_Retail_Trade_Id==tradeId||(tradeId==null&&s.crmc_Retail_Trade_Id==null))编??辑-基于BrantLamborn的这篇文章,它看起来像以下内容会做你想做的事:where(object.Equals(s.crmc_Retail_Trade_Id,tradeId))NullSemantics(LINQtoSQL)MSDN页面链接到一些有趣的信息:LINQtoSQLdoesnotimposeC#nullonSQLorVisualBasichasnocomparison语义。比较运算符在句法上被翻译成它们的SQL等价物。语义反映了由服务器或连接设置定义的SQL语义。在默认SQLServer设置下,两个空值被认为是不相等的(尽管您可以更改设置以更改语义)。在任何情况下,LINQtoSQL都不会考虑查询转换中的服务器设置。与文字null(None)的比较将转换为适当的SQL版本(是否为null)。排序规则中的null(无)值由SQLServer定义;LINQtoSQL不会更改排序规则。在这一点上不确定,但我怀疑当linq-to-sql将其转换为sql查询字符串时,您会得到一个略有不同的表达式,直接指定null,因此在某些时候您最终会以NULL与自身进行比较,并且NULL=NULL被定义为假。解决这个问题的另一种选择是我遇到了这个问题。where(tradeId==null?s.crmc_Retail_Trade_Id==null:s.crmc_Retail_Trade_Id==tradeId)我不熟悉Linq,但总的来说:NULL表示缺失、未知或未定义的值。严格来说,变量不能等于NULL;提供这种构造的低级语言通常这样做是为了方便,因为没有简单的替代方案——在更高级别上,通常最好依赖ISNULL、defined或语言提供的任何内容。一个未定义的变量不等于另一个未定义的变量(这同样适用于NULL==NULL)。JoeCelko有一个很好的例子,他写了一个查询来找到所有头发颜色与他们驾驶的车辆颜色相匹配的人。这个查询应该匹配一个四处走动的秃头男人吗?以上就是C#学习教程的全部内容:Linqwherecolumn==(nullreference)andcolumn==null。收藏不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: