我想从单个实体(通过Id)获得单个属性(blob)。我有:
context.References
.Single(r => r.ID == id)
.Blob;
这让我觉得效率低下,因为我得到的是整个Reference,只是为了丢弃除Blob之外的所有内容。这导致了
context.References
.Where(r => r.ID == id)
.Select(r => r.Blob)
.Single();
哪个应该只查询Blob,但最后将Single作为事后补充有点烦人(但强制我认为必要的单一性)。我的问题是:有没有更好的方法来实现这一目标,还是我的第二个代码块就是这样?
谢谢!
答案 0 :(得分: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]
所以你说第二个查询稍微更有效率是正确的。这是否重要是你需要测试和决定的。
答案 1 :(得分:1)
您可以使用context.References.Single(r => r.ID == id).Blob
来组合Where和Single,但这将转移整个实体。为了提高效率,您的解决方案是最好的。