繁体   English   中英

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

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

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