私は2つのクラス:PropertyとPropertyValueを持っています。プロパティにはいくつかの値があり、各値は新しいリビジョンです。LINQからEFのパフォーマンスを改善する方法
プロパティのセットを取得するときに、各プロパティの値の最新のリビジョンを含めたいとします。 T-SQLで
これは非常に効率的に次のように行うことができます。このクエリで
SELECT
p.Id,
pv1.StringValue,
pv1.Revision
FROM dbo.PropertyValues pv1
LEFT JOIN dbo.PropertyValues pv2 ON pv1.Property_Id = pv2.Property_Id AND pv1.Revision < pv2.Revision
JOIN dbo.Properties p ON p.Id = pv1.Property_Id
WHERE pv2.Id IS NULL
ORDER BY p.Id
「魔法」LEFTによって強制結果なし条件よりも少ないに参加して、行を探すことですJOIN。
LINQ to EFを使用して同様のことを達成するにはどうすればよいですか?
私が思い付くことができる最高のものだった。
from pv in context.PropertyValues
group pv by pv.Property into g
select g.OrderByDescending(p => p.Revision).FirstOrDefault()
それは正しい結果を生成しませんが、他に比べて約10倍遅くなります。
これは非常にうまく動作します!ありがとうございました!! – user1104938
おそらくあなたはその解決策を受け入れることができますか? – Arion