带where子句的LINQ lambda

本文关键字:LINQ lambda 子句 where | 更新日期: 2023-09-27 18:07:30

我正试图将此LINQ语句转换为Lambda表达式。

totalTickets = (from parent in context.EventParentSponsors
    join sponsor in context.EventSponsors
    on parent.EventSponsorId equals sponsor.EventSponsorId
    where parent.ParentSponsorID == parentId
    select sponsor.InvitationCount).FirstOrDefault();

这是我目前为止写的:

totalTickets = context.EventParentSponsors
    .Join(context.EventSponsors, 
        parent => parent.EventSponsorId,
        sponsor => sponsor.EventSponsorId, 
        (parent, sponsor) => new { sponsor.InvitationCount })
    .Where(o => o.EventParentSponsors.ParentSponsorId).FirstOrDefault();

但是我得到了这个错误

AnonymousType#1' does not contain a definition for 'EventParentSponsors'
and no extension method 'EventParentSponsors' accepting a first argument of type     'AnonymousType#1' could be found

我错过了什么?

带where子句的LINQ lambda

试试这个:

totalTickets = context.EventParentSponsors.Join(context.EventSponsors, 
                                                x=>x.EventSponsorId,
                                                y=>y.EventSponsorId,
                                                (x,y) =>
                                                new 
                                                {
                                                    ID=x.ParentSponsorID , 
                                                    Count = x.InvitationCount 
                                                })
                                          .Where(x=>x.ID==parentId)
                                          .Select(x=>x.Count)
                                          .FirstOrDefault();

如果你使用LINQPad它会向你展示Lambda形式的方法:

totalTickets = context.EventParentSponsors
    .Join(context.EventSponsors, 
        parent => parent.EventSponsorId,
        sponsor => sponsor.EventSponsorId, 
        (parent, sponsor) => new { parent = parent, sponsor = sponsor })
    .Where(o => o.parent.EventParentSponsors.ParentSponsorId == parentId)
    .Select(o => o.sponsor.InvitationCount)
    .FirstOrDefault();

你缺少的关键部分在你的投影中。当您使用查询语法时,您基本上是在投影父元素和子元素:

(parent, sponsor) => new { parent = parent, sponsor = sponsor })