C# Lambda转换为LINQ

C# Lambda转换为LINQ,c#,linq,lambda,C#,Linq,Lambda,我对lambda一无所知,甚至连一本复杂的书都看不懂。我下面有一个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 &am

我对lambda一无所知,甚至连一本复杂的书都看不懂。我下面有一个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
    ......

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

这已经是linq(使用lambda表达式)@slawekwin抱歉,那么我是编程新手。如果这是一个愚蠢的问题,我想把它转换成linq表达式,但原因是什么?您是否对查询有问题,或者是否希望提高可读性?lambda很漂亮。为什么你想要那个可怕的语法?为什么不学习如何阅读lambda表达式呢?例如,
publicintadd(inta,intb){returna+b;}
的lambda等价物是
(inta,intb)=>{returna+b;}
。参数在
=>
箭头之前,方法体在它之后。参数类型通常可以推断,因此它们通常被忽略:
(a,b)=>{returna+b;}
。另外,lambda通常是只包含一个表达式的短方法,因此有简化的语法:
(a,b)=>a+b
。我也更喜欢lambda linq。在运行时,不管怎样,理解都符合lambda linq的要求,所以在我看来,它确实没有什么不同。@Steffsww我可以使用连接进行转换吗?。可能的是/否?@Kiv2你可以,但为什么?在这里避免连接只会使查询更加复杂convoluted@Martheen只是想看看它是什么样子:)我想看看新的东西和学习it@Kiv2如果你了解它是如何工作的,那么自己重写它(变成一个可怕的循环)就很简单了。用join写作意味着你在思考,而不是低效地重新发明轮子。另外,任何阅读您的代码的人都可以快速理解它。学习LINQ,拥抱它。