繁体   English   中英

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

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

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