使用Linq-to-SQL可以通过几种方式编写相同的“Join”。这有什么性能差异吗?什么是最佳实践?
或者:
database.Orders.
Where(o => o.S == s).
Join(database.OrderEvents.Where(e => e.B == b),
o => o, e => e.Order, (o, e) => o).
ToArray();
或者:
database.Orders.
Where(o => o.S == s).
Join(database.OrderEvents,
o => o, e => e.Order, (o, e) => new { O = o, E = e }).
Where(a => a.E.b == b).
Select(a => a.O).
ToArray();
或者:
database.Orders.
Join(database.OrderEvents,
o => o, e => e.Order, (o, e) => new { O = o, E = e }).
Where(a => a.O.S == s && a.E.b == b).
Select(a => a.O).
ToArray();
答案 0 :(得分:1)
你不能简单地说哪个查询做得更好。为此,您必须跟踪生成的SQL语句并对其进行分析。
所有三个linq语句最终可能产生非常相似的SQL语句,如果是这样,你将看不到任何性能差异。
如果linq语句确实生成了不同的SQL语句,您可以使用sql工具检查性能,查看查询计划等。
也许您仍然看不到任何性能差异,因为SQL Server会为您优化查询计划...
所以不,通常没有最佳实践,除非您必须完成分析生成的查询的工作,如果您想要微调您的应用程序或者您想要解决性能问题......
答案 1 :(得分:0)
好吧,我在分析器下运行了1和3个版本的代码。除了WHERE子句中的参数和条件的顺序之外,SQL查询是相同的。所以,性能是一样的。那么可读性呢?