使用Virtual Icollection属性筛选Linq查询

本文关键字:Linq 查询 筛选 属性 Virtual Icollection 使用 | 更新日期: 2023-09-27 17:59:04

我正试图查询一个列表,该列表生成的会议中,所有与会者都没有现有业务。我的查询部分有效。如果会议上没有人有业务,那就完美了。如果我连接各种各样的人(参加会议的有企业的人和没有企业的人),它就会断开。我可以问我可以对我的ling查询进行哪些编辑,以便将所有与会者都考虑在内吗。

交互.Cs

public virtual ICollection<InteractionAttendee> Attendees { get; set; }

与会者.Cs

public virtual Interaction Interaction { get; set; }
public virtual Person Person { get; set; }

我的查询

from z in ctx.Meetings
    where z.Attendees.Any(y => !ctx.Businsses.Any(x => x.Owner_Id == y.Person.Id)
select new {Id = z.Id}

使用Virtual Icollection属性筛选Linq查询

不要使用Any,而是尝试使用All

from z in ctx.Meetings
    where z.Attendees.All(y => !ctx.Businsses.Any(x => x.Owner_Id == y.Person.Id)
select new {Id = z.Id}

通过"全部",您指定所有与会者必须完全满足条件。

不确定您是否在寻找这个。。。。

您使用的是两个相互排斥的集合(一个有业务的人和一个没有业务的人参加会议)

int possibillity = 1; //1=> all has business
                    //2=> none has business
                    //3=> some may have business  
var meetings = 
    ctx.Meetings.where(m=> (possibillity==1 && m.Attendees.All(a=> ctx.Businsses.Any(x => x.Owner_Id == a.Person.Id)))
                    || (possibillity==2 && m.Attendees.All(a=> !ctx.Businsses.Any(x => x.Owner_Id == a.Person.Id))) 
                    || (possibillity==3 && 1==1));