[英]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.