简体   繁体   English

如何将列表传递给 LINQ 查询作为搜索条件?

[英]How to pass a list to a LINQ query as search condition?

Right now, I could run a LINQ query like below:现在,我可以运行 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();
    }

What if I pass a list of person to this method above to be like below?如果我将人员列表传递给上面的此方法,如下所示怎么办? How do I change my query to iterate it?如何更改我的查询以对其进行迭代?

 private List<Person> PopulatePerson(List<Person> persons)
    {

    }

I can foreach List<Person> , but it will connect to the db many times.我可以foreach List<Person> ,但它会多次连接到数据库。 Assuming want to take the first result.假设要取第一个结果。 actually that is just an example.实际上这只是一个例子。 actually there are many duplicate child records in order and thus I just need to take the first records which I manage to get it.实际上有许多重复的子记录,因此我只需要获取我设法获得的第一条记录。 But what if I want to pass a list into the query to iterate inside the LINQ instead of writing a foreach outside.但是,如果我想将一个列表传递给查询以在 LINQ 内部进行迭代,而不是在外部编写一个 foreach 怎么办。

Contains is suppported, so you need to select the identifier into a collection like array or list:支持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();
}

I assume that you want to return multiple persons then so not only one.我假设你想返回多个人,所以不仅仅是一个人。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM