Подтвердить что ты не робот

Запрос Linq с массивом в where where?

Я искал это, но все еще не могу заставить это работать для меня. У меня есть массив Id, связанный с пользователем (их идентификатор организации). Они помещаются в 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, который получает список Personnel, этот код выглядит следующим образом:

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

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

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

4b9b3361

Ответ 1

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

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

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

where OrgID in (1,2,...,n)

Ответ 2

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

var query = (from p in this.Database.Personnels
             where OrgIds.Contains(p.OrganisationId)
             select p).ToList();

Ответ 3

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

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();

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

Матф

Ответ 4

Это было бы что-то вроде этого, 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();

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