Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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# ctx.Object.Select和obj.Select之间的EF差异_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# ctx.Object.Select和obj.Select之间的EF差异

C# ctx.Object.Select和obj.Select之间的EF差异,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,今天我遇到了一些奇怪的事情 我使用mini profiler查看执行的SQL查询 似乎在使用obj.Children.Select(x=>x.Prop1).SingleOrDefault()时,执行的查询会获取所有列。 但是,使用ctx.Children.Select(x=>x.Prop1&&x.IDParent==idObj),SingleOrDefault()只获取Prop1 知道为什么会有差异吗?因为第一个查询在这里执行: obj.Children. ... ... .SingleOrD

今天我遇到了一些奇怪的事情

我使用mini profiler查看执行的SQL查询

似乎在使用obj.Children.Select(x=>x.Prop1).SingleOrDefault()时,执行的查询会获取所有列。 但是,使用ctx.Children.Select(x=>x.Prop1&&x.IDParent==idObj),SingleOrDefault()只获取Prop1


知道为什么会有差异吗?

因为第一个查询在这里执行:

obj.Children. ...
... .SingleOrDefault()
第二个查询在这里执行:

obj.Children. ...
... .SingleOrDefault()
第一个查询是包含所有列的完整实体,因为导航属性是由于延迟加载而加载的。加载实体后,您的
选择将应用于内存中。当您投影到单个属性时,此时数据库查询已经完成


第二个查询实际上在数据库中执行投影(选择一个列),并且加载的内容不会超过此列。

您的意思是在其中包含一个
Where
子句吗?在这两种情况下,我都有一个Where子句。但我不认为把它包括进去有什么关系。。。