2013-12-02 4 views
0

Я пытаюсь выполнить вложенный запрос linq.Вложенный запрос LINQ

public class Sic 
{ 
    public int Id { get; set; } 
    public string Code { get; set; } 
} 

public class Message 
{ 
    public List<Sic> Sics { get; set; } 
    public int Id { get; set; } 
} 

List<Message> msgList = new List<Message>(); 


Message m1 = new Message 
      { 
       Id = 0, 
       Sics = new List<Sic>() 
        { 
         new Sic() {Id = 0, Code = "A2A"}, 
         new Sic() {Id = 1, Code = "A2B"}, 
         new Sic() {Id = 2, Code = "A2C"}, 
         new Sic() {Id = 3, Code = "A2D"} 
        } 
      }; 

Message m2 = new Message 
     { 
      Id = 1, 
      Sics = new List<Sic>() 
        { 
         new Sic() {Id = 4, Code = "B2A"}, 
         new Sic() {Id = 5, Code = "B2B"}, 
         new Sic() {Id = 6, Code = "B2C"}, 
         new Sic() {Id = 7, Code = "B2D"} 
        } 
     }; 

msgList.Add(m1); 
msgList.Add(m2); 

List<string> searchList = new List<string> {"A2A", "A2B"}; 

Я хочу, чтобы найти сообщения в msgList где спискупоиск содержатся по Sics каждых каждое сообщение, т.е. m1 должны быть найдены с использованием вышеуказанного спискупоиска.

ответ

1

Вы можете использовать что-то вроде,

msgList.Where(msg=>msg.Sics.Any(sic=>searchList.Contains(sic.Code))); 

или, если вам нужно, чтобы соответствовать всем условиям поиска,

msgList.Where(msg => searchList.All(searchTerm=>msg.Sics.Any(sic=>sic.Code==searchTerm))) 
+0

Я думаю, что ОП означает «все Идентификаторы в спискупоиске» содержатся в Sics сообщения. –

+0

@ JuliánUrbano, Может быть, обновление может ему помочь. –

1

Если все идентификаторы в спискупоиска должны быть согласованы

msgList.Where(msg => searchList.Any() && searchList.All(s => msg.Sics.Any(sic => s==sic.Code))) 

Если какой-либо идентификатор в спискупоиска должен быть согласован

msgList.Where(msg=>msg.Sics.Any(sic=>searchList.Contains(sic.Code))); 
Смежные вопросы