Entity framework 选择单个实体的一部分而不检索整个实体
我想从单个实体(按Id)获取单个属性(blob)。我有: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,但是在最后把
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]