Запрос 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?
Ответы
Ответ 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();
Таким образом, будет выполнен окончательный запрос для получения персонала, содержащий комбинированный запрос от обоих.