使用虚拟Icollection属性过滤Linq查询

时间:2015-06-22 17:50:21

标签: c# linq

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

Interaction.Cs

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

Attendee.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}

2 个答案:

答案 0 :(得分:1)

不要使用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}

使用All,您指定所有参加者必须满足条件。

答案 1 :(得分:0)

不确定你是否在寻找这个......

您正在使用2个互斥的套装(有业务的人和没有业务的人参加会议)

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