2011-01-13 4 views
0

В следующем запросе LINQ я возвращаю людей, соответствующих определенным критериям. В критериях у меня есть условие ИЛИ. Как вернуть, какие из условий OR, с которыми встретился человек? Я хотел бы включить x.AttId в оператор .Select. У каждого человека может быть много атрибутов, назначенных им одновременно.Как добавить условие ИЛИ, которое было выполнено к моему результату

var DNR = dc.Contacts.Where(x => x.Type == 1 && 
         x.Att.Any(caa => 
            caa.ContactID == x.ContactID && 
            (caa.AttID == 102 || caa.AttID == 103) 
            ) 
          ) 
    .Select(x => new {x.ContactID, x.FirstName, x.LastName}) 
    .OrderBy (x => x.ContactID) 

ответ

0

Вы можете сделать следующее:

var DNR = dc.Contacts.Where(x => x.Type == 1 
     && x.Att.Any(caa => caa.ContactID == x.ContactID && 
      (caa.AttID == 102 || caa.AttID == 103))) 
    .Select(p => new 
     { 
     p.Att.First(r => r.ContactID == p.ContanctID 
      && (r.AttID == 102 || r.AttID == 103)).AttID, 
     p.ContactID, 
     p.FirstName, 
     p.LastName 
     } 
    ).OrderBy (q => q.ContactID) 
0

Вот вариант, если вы хотите знать определенный набор AttID, которые соответствуют.

var DNR = 
    from x in dc.Contacts 
    from caa in x.Att 
    where x.ContactID == caa.ContactID 
    where caa.AttID == 102 || caa.AttID == 103 
    group caa.AttID 
     by new { x.ContactID, x.FirstName, x.LastName, } 
     into gs 
    orderby gs.Key.ContactID 
    select new 
    { 
     Contact = gs.Key, 
     Atts = gs.Distinct(), 
    }; 
Смежные вопросы