Linq запрос с массивом в предложении где? - PullRequest
22 голосов
/ 07 мая 2009

Я искал это, но все еще не могу заставить это работать для меня. У меня есть массив идентификаторов, связанных с пользователем (их идентификатор организации). Они помещаются в int [] следующим образом:

int[] OrgIds = (from oh in this.Database.OrganizationsHierarchies
                       join o in this.Database.Organizations on oh.OrganizationsId equals o.Id
                       where (oh.Hierarchy.Contains(@OrgId))
                          || (oh.OrganizationsId == Id)
                       select o.Id).ToArray();

Код там не очень важен, но он показывает, что я получаю целочисленный массив из запроса Linq.

Тем не менее, я хочу запустить еще один запрос Linq, который получает список персонала, этот код выглядит следующим образом:

List<Personnel> query = (from p in this.Database.Personnels
                                where (search the array)
                                select p).ToList();

Я хочу добавить в предложение where способ выбора только тех пользователей, у которых в массиве присутствуют значения OrganizationId. Итак, в SQL, где я хотел бы сделать что-то вроде «где OrganizationId = '12' или OrganizationId = '13' или OrganizatonId = '17'».

Можно ли сделать это довольно легко в Linq / .NET?

Ответы [ 4 ]

42 голосов
/ 07 мая 2009

Хотя это, вероятно, лучше подходит для объединения, вы можете использовать это:

List<Personnel> query = 
    (from p in this.Database.Personnels 
    where OrgIds.Contains(p.OrgID) select p).ToList();

Это переведет в SQL что-то вроде ..

where OrgID in (1,2,...,n)
6 голосов
/ 07 мая 2009

Проверка с использованием метода Contains должна выполнить эту работу здесь.

var query = (from p in this.Database.Personnels
             where OrgIds.Contains(p.OrganisationId)
             select p).ToList();
2 голосов
/ 07 мая 2009

Я хотел отдать Адаму должное за ответ, но я также хотел поделиться кодом, который использовал для этой работы:

List<int> OrgIds= (from oh in this.Database.OrganizationsHierarchies
                       join o in this.Database.Organizations on oh.OrganizationsId equals o.Id
                       where (oh.Hierarchy.Contains(@OrgId))
                          || (oh.OrganizationsId == Id)
                       select o.Id).ToList();

List<Personnel> query = (from p in this.Database.Personnels
                                where (OrgIds.Contains(p.OrganizationId))
                                select p).ToList();

Спасибо всем,

Матф

1 голос
/ 07 мая 2009

Было бы что-то вроде этого, OrgIds.ToList.Contains (p.OrginizationID)

Хотя на самом деле я бы сделал это больше так:

var OrgIds = (from oh in this.Database.OrganizationsHierarchies
                   join o in this.Database.Organizations on oh.OrganizationsId equals o.Id
                   where (oh.Hierarchy.Contains(@OrgId))
                      || (oh.OrganizationsId == Id)
                   select o.Id);
List<Personnel> query = (from p in this.Database.Personnels
                            where (OrgIds.Contains(p.OrigizationID)
                            select p).ToList();

Таким образом, будет выполнен последний запрос для получения персонала, содержащий объединенный запрос от обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...