如何将 linq 转换为 lambda 表达式


var getr = (from d in _context.DR
join r in _context.R on d.RID equals r.RID
where HID == r.HID && cI >= d.DRD && cO < d.DRD
group d by new {d.RID, d.RGID} into g
select g);

如何将 Linq 转换为 lambda?这就是我得到的:

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);

使用其中任何一个有什么优点和缺点吗?

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

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

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);

lambda有很多可用的函数,即single((,First((,Take((,Skip((。

尽管您可以通过在查询结束时调用仅限 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);

由于延迟(或延迟(执行,两个示例版本返回相同的输出而没有性能差异,这意味着查询不会在声明点执行,但它将在尝试遍历结果变量时执行。

但是,例如,如果您不希望延迟执行,或者需要使用 Average(( 或 Sum(( 等聚合函数之一,您应该意识到在要查询和结果的赋值之间修改基础序列的可能性。在这种情况下,我认为最好使用 Lambda 表达式来启动或将仅限 Lambda 的方法添加到查询表达式中。

最新更新