【发布时间】:2019-05-30 20:20:10
【问题描述】:
我正在尝试使用 Entity Framework 和 LINQ 从数据库中检索记录。它基本上可以按预期工作,但是对于带有 WHERE 语句的错误,我不太清楚。
var nodeId = "001";
//This works and returns the record I am looking for
var nodeDisplayName = ("#" + nodeId);
var filteredNodes = dbContext.Node.Where(n => n.DisplayName == nodeDisplayName).ToList();
//This does not work and returns 0 results
var filteredNodes2 = dbContext.Node.Where(n => n.DisplayName == ("#" + nodeId )).ToList();
我希望这两个变体的行为完全相同,如果我在内存中的 List 上运行它们,它们似乎会这样做。但是当针对实体框架/数据库运行时,它们的行为会有所不同。只需使用第一种方法,我就可以很容易地修复该错误,但我想了解导致行为差异的原因。
编辑
所以生成的 SQL 查询如下所示:
SELECT `n`.`id`, `n`.`display_name`, `n`.`reg_tms`
FROM `tablename`.`node` AS `n`
WHERE `n`.`display_name` = '#001'
SELECT `n`.`id`, `n`.`display_name`, `n`.`reg_tms`
FROM `tablename`.`node` AS `n`
WHERE `n`.`display_name` = ('#' + '001')
所以这让事情变得更清楚了。我曾假设实体框架会在生成查询之前连接字符串。
【问题讨论】:
-
定义“行为不同”。您检查了正在生成的 SQL 吗?
-
$"#{nodeId}"怎么样?它将避免嵌套括号内的丑陋连接。 -
@KunalMukherjee 为什么?它有什么变化? EF 甚至支持吗?
-
那么,EF 是否支持
string.Format? @KunalMukherjee -
这个问题是关于EF的。
标签: c# entity-framework linq lambda .net-core