2012-04-21 61 views
3

我想从单个实体(按Id)获取单个属性(blob)。我有:选择单个实体的一部分而不检索整个实体

context.References 
    .Single(r => r.ID == id) 
    .Blob; 

这让我觉得效率低下,因为我得到整个引用,只丢弃除Blob之外的所有内容。这导致

context.References 
    .Where(r => r.ID == id) 
    .Select(r => r.Blob) 
    .Single(); 

只应查询的斑点,但具有单作为结尾事后有些烦人(尚未执行奇异我觉得是必要的)。我的问题是:是否有更好的方法来实现这一点,或者是我的第二个代码块就像它的方式?

谢谢!

回答

1

恐怕就是这样。运行在LINQPad您的查询表明,实体框架翻译查询到这一点:

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

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

那么你是正确的,第二个查询更有效。这是否意义重大,可供您测试和决定。

1

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

相关问题