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
Entity framework 选择单个实体的一部分而不检索整个实体_Entity Framework_Linq To Entities - Fatal编程技术网

Entity framework 选择单个实体的一部分而不检索整个实体

Entity framework 选择单个实体的一部分而不检索整个实体,entity-framework,linq-to-entities,Entity Framework,Linq To Entities,我想从单个实体(按Id)获取单个属性(blob)。我有: context.References .Single(r => r.ID == id) .Blob; 这给我的印象是效率低下,因为我获取了整个引用,但却丢弃了除了Blob之外的所有内容。这导致了 context.References .Where(r => r.ID == id) .Select(r => r.Blob) .Single(); 它应该只查询Blob,但是在最后把

我想从单个实体(按Id)获取单个属性(blob)。我有:

context.References
    .Single(r => r.ID == id)
    .Blob;
这给我的印象是效率低下,因为我获取了整个引用,但却丢弃了除了Blob之外的所有内容。这导致了

context.References
    .Where(r => r.ID == id)
    .Select(r => r.Blob)
    .Single();
它应该只查询Blob,但是在最后把单曲作为事后的想法有点烦人(但我觉得强制执行奇点是必要的)。我的问题是:有没有更好的方法来实现这一点,或者我的第二个代码块就是这样


谢谢

恐怕情况就是这样。在LINQPad中运行查询表明Entity Framework将查询转换为:

SELECT TOP (2) 
[Extent1].[Id] AS [Id], 
[Extent1].[Blob] AS [Blob], 
... etc for all columns
FROM [dbo].[References] AS [Extent1]
WHERE 1 = [Extent1].[Id]


因此,第二个查询的效率稍微高一点,这是正确的。这是否重要由您来测试和决定。

您可以使用
context.References.Single(r=>r.ID==ID).Blob来组合Where和Single,但这将传输整个实体。为了提高效率,您的解决方案是最好的

SELECT TOP (2) 
[Extent1].[Blob] AS [Blob]
FROM [dbo].[References] AS [Extent1]
WHERE 1 = [Extent1].[Id]