C# 如何将Linq转换为Lambda表达式

C# 如何将Linq转换为Lambda表达式,c#,linq,C#,Linq,使用其中任何一种都有利弊吗?在性能方面:两者之间没有任何性能差异 一个人应该使用哪一个主要是个人偏好,但重要的是要记住,在某些情况下,一个更适合另一个 var getr = _context.DR.Join(_context.R, x => x.RID, y => y.RID, (x, y) => new { R= x, DR= y}).Where(z => z.DR.RID== y.RID); lambda有很多可用的函数,比如single()、First()、Tak

使用其中任何一种都有利弊吗?

在性能方面:两者之间没有任何性能差异

一个人应该使用哪一个主要是个人偏好,但重要的是要记住,在某些情况下,一个更适合另一个

var getr = _context.DR.Join(_context.R, x => x.RID, y => y.RID, (x, y) => new { R= x, DR= y}).Where(z => z.DR.RID== y.RID);
lambda有很多可用的函数,比如single()、First()、Take()、Skip()

尽管您可以通过在查询结束时调用Lambda-only方法来混合和匹配这两种方法:

int[] ints = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// using Query expression
var evensQuery = from i in ints where isEven(i) select i;
// using Lambda expression
var evensLambda = ints.Where(isEven);
或者,为了更好的可读性:

// mix and match query and Lambda syntax
//Example ver :1
var query = (from person in people
             join pet in pets on person equals pet.Owner
             select new { OwnerName = person.Name, Pet = pet.Name }).Skip(1).Take(2);
由于延迟(或延迟)执行,这两个示例版本都返回相同的输出,没有性能差异,这意味着查询在声明时不执行,但在尝试迭代结果变量时将执行


但是,如果您不希望延迟执行,或者需要使用一个聚合函数,例如Average()或Sum(),那么您应该知道在要查询的赋值和结果之间修改底层序列的可能性。在这种情况下,我认为最好从Lambda表达式开始,或者将Lambda-only方法添加到查询表达式中。

第二种方法与其他编程语言更一致。这两者在语义上是等价的。它们分别称为“查询”和“方法”语法。感谢您提供的信息!但是你能给我举一个在lambda中使用函数join和groupby的例子吗?嗨,我仍然坚持在我的例子中使用groupby-into和select部分。我是按部分进行分组的,但是,我不知道如何将其赋给变量并在lambda中选择它
// mix and match query and Lambda syntax
//Example ver :1
var query = (from person in people
             join pet in pets on person equals pet.Owner
             select new { OwnerName = person.Name, Pet = pet.Name }).Skip(1).Take(2);
//Example ver :2
var query = from person in people
            join pet in pets on person equals pet.Owner
            select new { OwnerName = person.Name, Pet = pet.Name };

var result = query.Skip(1).Take(2);