2015-06-22 35 views
0

我試圖查詢生成所有參加人員沒有現有業務的會議的列表。我的查詢部分工作。如果會議中沒有人有業務,那麼它就可以很好地工作。如果我連接一個品種(一個人和一個沒有出席會議的業務的人),它會中斷。請問我可以對我的查詢進行哪些編輯,以便它將考慮到所有與會者。使用虛擬Icollection屬性過濾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} 

回答

1

而是使用任何,嘗試所有

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} 

您只需指定所有參加者必須滿足條件。

+0

感謝bud,令人驚訝地工作我很高興我能夠保持乾淨的linq語法 – Master

+0

不客氣! –

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