2011-01-13 7 views
0

次のLINQクエリでは、いくつかの基準を満たす人が返されます。基準には、OR条件があります。その人が会ったOR条件のどれを返すのですか? .Selectステートメントにx.AttIdをインクルードしたいと思います。それぞれの人は、同時に複数のAttIdsを割り当てることができます。結果にどのOR条件が満たされたかを追加するには

あなたは次の操作を行うことができます
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(), 
    }; 
関連する問題