Rob*_*bin 2 .net c# linq sqlmetal linq-to-sql
我正在使用SqlMetal(linq to sql)来从数据库中检索内容.但是,我使用以下代码得到不同的结果:
var record1 = Enumerable.FirstOrDefault(_dataContext.StaticPageLangs,
r => r.selected_partial_url_id == partialUrlid
&& r.selected_last_part_url_id == lastPartUrlId
&& r.language_id == languageId);
var record2 = _dataContext.StaticPageLangs.FirstOrDefault(
r => r.selected_partial_url_id == partialUrlid
&& r.selected_last_part_url_id == lastPartUrlId
&& r.language_id == languageId);
Run Code Online (Sandbox Code Playgroud)
在记录1填充后,但record2为NULL,我希望它们是相同的.
谁有人解释这个区别?
编辑:
旁注:
r.selected_partial_url_id是一个可以为null的int,因此被比较的属性r.selected_last_part_url_id属于int类型,因此被比较的属性r.language_id属于int类型,因此被比较的属性
由于您使用的是Enumerable.FirstOrDefault(...),因此第一个查询在内存中完成.第二个查询由数据上下文转换为SQL,并由数据库执行.
您必须检查sql profiler以查看执行的实际查询是什么,以查看区别.数据库中任何可以为空的列都可能出现问题?
UPDATE
如果比较转换为SQL语句的表达式中的可空属性,请注意如果比较的两个值都为null,则可能会出错.例:
_dataContext.StaticPageLangs
.FirstOrDefault(r => r.selected_partial_url_id == partialUrlid)
Run Code Online (Sandbox Code Playgroud)
如果partialUrlid == NULL并且存在selected_partial_url_id == NULL的记录,则不会产生任何记录.原因:翻译的sql包含'selected_partial_url_id == NULL'而不是'selected_partial_url_id IS NULL'.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |