Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 组合字符串时,方法语法中的Where子句失败_C#_Entity Framework_Linq_Lambda_.net Core - Fatal编程技术网

C# 组合字符串时,方法语法中的Where子句失败

C# 组合字符串时,方法语法中的Where子句失败,c#,entity-framework,linq,lambda,.net-core,C#,Entity Framework,Linq,Lambda,.net Core,我正在尝试使用实体框架和LINQ从数据库中检索记录。它的工作原理与预期基本一致,但对于带有WHERE语句的bug,我不太清楚 var nodeId = "001"; //This works and returns the record I am looking for var nodeDisplayName = ("#" + nodeId); var filteredNodes = dbContext.Node.Where(n => n.DisplayName == nodeDispl

我正在尝试使用实体框架和LINQ从数据库中检索记录。它的工作原理与预期基本一致,但对于带有WHERE语句的bug,我不太清楚

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();
我希望这两个变量的行为完全相同,如果我在内存中的列表中运行它们,它们似乎会这样做。但在实体框架/数据库上运行时,它们的行为不同。我可以通过使用第一种方法很容易地修复这个bug,但是我想了解是什么导致了行为上的差异

编辑

因此,生成的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')

这样事情就明朗了一点。在生成查询之前,我假设Entity Framework将对字符串进行压缩。

我将继续处理您在文章编辑时提到的注释、原始问题和发现,我认为目标是将原始两条语句重构为一条语句

// code to refactor into a single statement
var nodeDisplayName = ("#" + nodeId);
var filteredNodes = dbContext.Node.Where(n => n.DisplayName == nodeDisplayName).ToList();
这可以重构为

// solution (refactored)
var filteredNodes = dbContext.Node.Where(n => n.DisplayName == $"#{nodeId}").ToList();

我最初把我的回答作为一个评论,但新的语法可能并不能作为一个最初的答案。我希望这能有所帮助。

定义“行为不同”。您是否检查了正在生成的SQL?改为
$“{nodeId}”
怎么样?它可以避免嵌套括号中丑陋的concat。@KunalMukherjee为什么?它改变了什么?EF支持吗?那么,EF支持
string.Format
@这个问题是关于EF的。