我想从单个实体(通过 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 作为事后的想法有点烦人(但我认为强制执行奇点是必要的)。我的问题是:有没有更好的方法来完成这个,或者我的第二个代码块就是这样?
谢谢!
最佳答案
恐怕事情就是这样。在 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]
所以你是正确的,第二个查询稍微更有效。这是否重要由您测试和决定。
关于entity-framework - 选择单个实体的一部分而不检索整个实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10259747/