2015-06-22 2 views
0

Я пытаюсь запросить список, в котором собраны собрания, на которых присутствуют все присутствующие, не имеет существующего бизнеса. Мой запрос работает частично. Он отлично работает, если на собрании нет никого, кто бы занимался бизнесом. Это сломается, если я подключу разновидность (человек с бизнесом и человек без бизнеса, который посещает собрание). Могу ли я спросить, какие изменения можно внести в мой запрос, чтобы он учитывал всех участников.Фильтрация запроса Linq с виртуальным свойством Icollection

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

Спасибо, заработал потрясающе, я рад, что могу сохранить чистый синтаксис 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)); 
Смежные вопросы