簡體   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