Meh*_*hdi 2 linq performance lambda join
我想知道在性能方面,使用查询语法或方法语法(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();
Run Code Online (Sandbox Code Playgroud)
我已经浏览过这些网站,但没有提到加入 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/query-syntax-and-method-syntax-内联
没有区别。在“真正”编译之前,您的第一个版本(查询语言)在词法上被翻译成第二个版本(方法语法)。查询语言只是语法糖,转化为方法调用。然后编译这些调用(如果可能 - 翻译本身并不关心结果的正确性,例如,People.Join即使是有效的 C# 并且Join在任何People可能的情况下都有这样的方法)。
可能存在的区别在于此转换使用显式Select调用而不是方法的resultSelector参数Join,但即使如此也不会显着影响性能。
Jon Skeet 的这篇文章帮助我理解了从查询语言到方法语法的转换。
回答“您应该使用什么”的问题:这完全取决于您。考虑:
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |