[英]LINQ Grouping a List of Objects into Anonymous Type
我在尝试使用 LINQ 查询 sql 数据库时遇到困难,以便将与另一个列表中的 object (a) 和匿名类型 (a) 关联的一个表中的所有对象 (b) 分组(b)s。 本质上,我有一个包含报价表的数据库,以及另一个包含与这些报价相关的操作历史记录的表。 我想做的是以这样的方式对它们进行分组,即我有一个包含每个报价的匿名类型列表,以及对该报价采取的每项操作的列表,因此签名将是:
List<'a>
where '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()
调用,仅在真正需要时才这样做。 我有一个重要的问题:你真的需要所有的 OffersHistories 栏目吗? 因为对完整的 object 进行分组非常昂贵,因此请尝试仅对必要的列进行分组。 如果您真的需要所有 offerHistories 来获得一个报价,那么我建议您编写一个子 select (这也是成本更高的性能):
var query = (from offer in context.Offers
select new { offer, offerHistories = (from offerHistory in context.OffersHistories
where offerHistory.TransactionId == offer.TransactionId
select offerHistory) });
Ps:为外键列创建索引是个好主意,在 where 和 group by 语句中使用的列,这些将使查询更快,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.