我想知道在性能方面,使用查询语法或方法语法(Lambda表达式)来连接两个实体之间有什么区别吗?
我已经知道,一般来说,查询语法和方法语法之间在结果方面没有区别。但是,为了加入哪一个更好地使用性能? 以下是示例代码:
var queryResult = (from p in People
join i in Incomes
on p.PersonId equals i.PersonId
select new { p.PersonId, p.Name, p.Age, i.Amount }
).ToList();
var lambdaResult = People.Join(Incomes,
p => p.PersonId,
i => i.PersonId,
(p, i) => new { p.PersonId, p.Name, p.Age, i.Amount }).ToList();
我已经浏览过这些网站,但没有提及加入 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/query-syntax-and-method-syntax-in-linq
答案 0 :(得分:4)
没有区别。您的第一个版本(查询语言)在词汇上翻译成第二个版本(方法语法)之前"真实"汇编。查询语言只是语法糖并转换为方法调用。然后编译这些调用(如果可能的话 - 翻译本身并不关心结果的正确性,例如,如果People.Join
甚至是有效的C#,并且在Join
中存在这样的People
方法可能是)。
这种翻译可能会使用明确的Select
调用而不是resultSelector
方法的Join
参数,但可能会对性能产生不可估量的影响。
This article帮助我理解了从查询语言到方法语法的转换。
回答问题"你应该使用什么":这完全取决于你。考虑: