Как добавить условие ИЛИ к моему результату? - PullRequest
0 голосов
/ 14 января 2011

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

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)

Ответы [ 2 ]

0 голосов
/ 15 января 2011

Вот вариант, если вы хотите знать различающийся набор 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(),
    };
0 голосов
/ 15 января 2011

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

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