我在尝试使用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,但是我尝试了许多不同的方法,并且对于如何进行操作感到茫然。
[请尝试避免.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语句中使用的列创建索引是一个好主意,它们将使查询更快,]]