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を照会するだけですが、最後にシングルを後付けとして持つことはやや面倒です(それでも、私が感じる特異点を強制する必要があります)。私の質問はこれです:これを達成するためのより良い方法はありますか、それとも私の2番目のコードブロックはそのままですか?

ありがとう!

4

2 に答える 2

1

恐れ入りますが、その通りです。LINQPadでクエリを実行すると、EntityFrameworkがクエリを次のように変換することがわかります。

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]

したがって、2番目のクエリの方がわずかに効率的であるというのは正しいことです。これが重要であるかどうかは、テストして決定するためのものです。

于 2012-04-21T14:41:01.173 に答える
1

WhereとSingleを組み合わせるために使用できますcontext.References.Single(r => r.ID == id).Blobが、それによってエンティティ全体が転送されます。効率を上げるために、ソリューションが最適です。

于 2012-04-21T14:48:45.257 に答える