LINQ将对象列表分组为匿名类型

问题描述 投票:0回答:1

我在尝试使用LINQ来查询sql数据库时遇到困难,以这种方式将与另一个表中的对象(a)关联的一个表中的所有对象(b)分组为具有(a)和a的匿名类型。 (b)清单。本质上,我有一个数据库,其中包含要约表,而另一个表则包含与这些要约相关的已执行操作的历史记录。我想要做的是将它们分组,这样我就得到了一个匿名类型的列表,其中包含每个要约,以及对该要约采取的每个操作的列表,因此签名应为:

List<'a>其中'a is new { Offer offer, List<OfferHistories> offerHistories}

这是我最初尝试的方法,显然不起作用

var query = (from offer in context.Offers
             join offerHistory in context.OffersHistories on offer.TransactionId equals offerHistory.TransactionId
             group offerHistory by offerHistory.TransactionId into offerHistories
             select { offer, offerHistories.ToList() }).ToList();

通常,我不会带着这么少的信息来到SE,但是我尝试了许多不同的方法,并且对于如何进行操作感到茫然。

c# linq linq-to-sql
1个回答
0
投票

[请尝试避免.ToList()呼叫,仅在确实必要时才这样做。我有一个重要的问题:您是否真的需要“优惠历史记录”的所有列?由于将整个对象分组非常昂贵,因此请尝试仅对必要的列进行分组。如果您真的需要一个要约的所有offerHistories,那么我建议编写一个子选择(这也要花费更多性能):

var query = (from offer in context.Offers
             select new { offer, offerHistories = (from offerHistory in context.OffersHistories
                                                   where offerHistory.TransactionId == offer.TransactionId
                                                   select offerHistory) });

P.s .:为外键列,在where和group by语句中使用的列创建索引是一个好主意,它们将使查询更快,]]

© www.soinside.com 2019 - 2024. All rights reserved.