[英]How to pass a list to a LINQ query as search condition?
現在,我可以運行 LINQ 查詢,如下所示:
private Person PopulatePerson(Person person)
{
return (from er in context.Orders
where er.personId == person.Id
select new Person()
{
Name = person.Name
Qty = er.OrderQty,
}).FirstOrDefault();
}
如果我將人員列表傳遞給上面的此方法,如下所示怎么辦? 如何更改我的查詢以對其進行迭代?
private List<Person> PopulatePerson(List<Person> persons)
{
}
我可以foreach
List<Person>
,但它會多次連接到數據庫。 假設要取第一個結果。 實際上這只是一個例子。 實際上有許多重復的子記錄,因此我只需要獲取我設法獲得的第一條記錄。 但是,如果我想將一個列表傳遞給查詢以在 LINQ 內部進行迭代,而不是在外部編寫一個 foreach 怎么辦。
支持Contains
,因此您需要將 select 標識符轉換為數組或列表之類的集合:
private IList<Person> PopulatePersons(IEnumerable<Person> persons)
{
string[] allIds = persons.Select(p => p.Id).ToArray();
return (from er in context.Orders
where allIds.Contains(er.PersonId)
join p in context.Persons on er.PersonId equals p.Id
group new { Qty = er.OrderQty, Name = p.Name} by er.PersonId into PersonIdGroup
select new Person()
{
Name = PersonIdGroup.First().Name,
Qty = PersonIdGroup.Sum(x => x.Qty)
}).ToList();
}
我假設你想返回多個人,所以不僅僅是一個人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.