【问题标题】:Lambda convert to LINQLambda 转换为 LINQ
【发布时间】:2016-10-04 12:13:53
【问题描述】:

我对 lambda 一无所知,我什至看不懂复杂的lambda expression。我在下面有这个 lambda 代码,我想将其转换为 LINQ,但我不知道如何。

var train = db.sample1
            .Join(db.sample2, a => a.CertificateId, b => b.CertificateId, (a, b) => new { a, b })
            .Where(x => x.a.Year.Value.Year == year && x.a.TrainingTypeId.Value == trainingTypeId && x.a.IsApproved.Value && x.b.EndDate >= DateTime.Now)
            .Select(z => z.a).Distinct();

到目前为止我已经尝试过并陷入困境:

var train = (from c in db.sample1
    join in ts sample2 where a.CertificateId equals b.CertificateId
    ......

【问题讨论】:

  • 这已经是 linq(正在使用 lambda 表达式)
  • @slawekwin 抱歉,我是编程新手。我想要的是把它转换成 linq 表达式
  • 对不起,这是一个愚蠢的问题,但出于什么原因?您的查询有问题还是想提高可读性?
  • Lambda 很漂亮。你为什么想要那种可怕的语法?
  • 那为什么不学习如何阅读 lambda 表达式呢?例如,public int Add(int a, int b) { return a + b; } 的 lambda 等效项是 (int a, int b) => { return a + b; }。参数在=> 箭头之前,方法体在它之后。参数类型通常可以推断出来,所以它们经常被忽略:(a, b) => { return a + b; }。此外,lambda 通常是只包含一个表达式的短方法,因此有一个简化的语法:(a, b) => a + b

标签: c# linq lambda


【解决方案1】:

Lambda LINQ 仍然是一个链接表达式。但是,该语句应如下所示:

var train2 = (from c in db.sample1
    join t in db.sample2
        on c.CertificateId equals t.CertificateId
        where c.Year.Value.Year == year && c.TrainingTypeId.Value == trainingTypeId
        && c.IsApproved.Value && t.EndDate >= DateTime.Now
        select c).Distinct();

【讨论】:

  • 我也更喜欢 lambda linq。无论如何,在运行时理解都会遵守 lambda linq,所以在我看来它确实没什么区别。
  • @Steffsww 我可以在不使用连接的情况下转换它吗?可能的?是/否?
  • @Kiv2 你可以,但为什么呢?避免在这里加入只会使查询更加复杂
  • @Martheen 只是想看看它的样子 :) 我想看看新事物并研究它
  • @Kiv2 如果您了解join 的工作原理,那么您自己重写它非常简单(变成一个可怕的循环)。用连接写作意味着你在思考,而不是低效地重新发明轮子。另外,任何阅读您的代码的人都可以快速理解它。学习 LINQ,拥抱它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
相关资源
最近更新 更多