我有两个类: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
“魔术师”在此查询是加入上比条件较小,查找行,而不由左强迫的结果加入。
如何使用LINQ to EF来实现类似的功能?
我能想出的最好的事情是:
from pv in context.PropertyValues
group pv by pv.Property into g
select g.OrderByDescending(p => p.Revision).FirstOrDefault()
它不会产生正确的结果,但比其他慢10倍左右。
这个效果非常好!谢谢!! – user1104938 2011-12-19 08:28:40
也许你可以接受解决方案吗? – Arion 2011-12-19 09:01:48