2012-04-21 4 views
3

単一のエンティティ(ID別)から単一のプロパティ(BLOB)を取得したいとします。私が持っている:私は唯一のBlob以外のすべてを破棄するために、全体の参照を取得していますので、エンティティ全体を取得せずに単一のエンティティの一部を選択する

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

これは、非効率的なとして私を打ちます。これが唯一のBlobを問い合わせる必要があります

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

につながったが、最後に付け足しとしてシングルを持つことは(まだ私は必要であると感じ特異点を施行)やや面倒です。私の質問は、これを達成するための良い方法があるのか​​、それとも私の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] 

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

1

あなたはどこで、シングルを組み合わせることcontext.References.Single(r => r.ID == id).Blobを使用することができますが、それは全体のエンティティを転送します。効率を上げるには、ソリューションが最適です。