LINQ для лиц, сравнивающих коллекции - PullRequest
0 голосов
/ 09 ноября 2011

У меня проблемы с запросом Linq, который на самом деле будет делать то, что мне нужно. Я построил поиск, который должен найти статьи в базе данных (структура сущностей), и тогда поиск использует список флажков, чтобы позволить пользователю выполнять поиск только в определенных областях практики. Я видел сообщения о соединениях linq и множественных коллекциях, но моя проблема в том, что я пытаюсь выбрать из статьи родительскую таблицу, и мне нужно сравнить .Practices со списком практик, который я собрал из списка флажков. .

Прежде, чем это был список флажков, это был выпадающий список, и этот запрос работал для поиска 1 практики:

ar = (from a in db.Articles
      from p in a.Practices
      where p.ID == practiceID
      select a);

Теперь мне нужно, чтобы предложение where работало как «IN» из обычного SQL. Моя коллекция практик, составленная из списка флажков, должна сравниваться с db.Articles.Practices для моего поиска.

Какие-либо предложения или уточнения необходимы?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Предполагается: список PractiseIds

ar = (from a in db.Articles
  from p in db.Practices
  where practiseIds.Contains(p.ID)
  select a);

Однако необходимо внести некоторые пояснения:

IN не является методом SQL, поддерживаемым первым классом в EF, поэтому приведенный выше код фактически превратится в списокиз или (возможно, это было решено в выпуске EF .net 4 - http://blogs.msdn.com/b/adonet/archive/2009/08/05/improvements-to-the-generated-sql-in-net-4-0-beta1.aspx)

Код Psuedo -

Select * From db.Articles 
inner join db.Practices on <relation>
Where db.Practices.practiceid = @p0 || db.Practices.practiceid = @p1 || etc..
2 голосов
/ 09 ноября 2011

Просто передайте коллекцию идентификаторов как массив practiceIds и используйте запрос Contains():

ar = (from a in db.Articles
      from p in a.Practices
      where practiceIds.Contains(p.ID)
      select a);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...