3

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

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

这让我觉得效率低下,因为我得到了整个参考,只是丢弃了除了 Blob 之外的所有东西。这导致

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

应该只查询 Blob,但最后将 Single 作为事后的想法有点烦人(但我认为有必要强制执行奇异性)。我的问题是:有没有更好的方法来实现这一点,或者我的第二个代码块就是这样?

谢谢!

4

2 回答 2

1

恐怕就是这样。在 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]

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

所以你说第二个查询效率更高一点是正确的。这是否重要是由您测试和决定的。

于 2012-04-21T14:41:01.173 回答
1

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

于 2012-04-21T14:48:45.257 回答