【问题标题】:Linq Group By: remove the Key from the resultLinq Group By:从结果中删除键
【发布时间】:2018-10-11 15:40:31
【问题描述】:

Linq group by 与 SQL 非常不同(因为它可以处理对象而不仅仅是元组),并且一开始并不那么直观。我很想写一个小函数把它放在像 MoreLinq 这样的框架中。

样本数据

假设我们有一个带有匿名类型的 c# List 或一个带有 3 个“列”的 DataReader。

你可以找到这个样本数据here on Fiddle

第一列分组

var grouping = from x in flattenedList
                   group x by x.IDMacroTab
                   into grouping_0                     
                   select new 
                   { 
                    IdMacrotab = grouping_0.Key, 
                    Data = (from y in grouping_0
                    select new { IDTab = y.IDTab, IDSlot = y.IDSlot })
                   };

结果

这就是结果:类似表格的数据被拆分为新的 {Key + Data},其中属性数据包含除分组中使用的列之外的所有列。

这种操作可以泛化吗?

var grouping = flattenedList.GroupColumnsBy(s => s.IDMacroTab);

【问题讨论】:

    标签: c# sql linq


    【解决方案1】:

    有一堆反射是可能的,但它只对少量的纯数据对象有用。

    对于大量,基本上复制所有对象可能不利于应用程序的内存消耗。

    对于所有不是 POCO 的对象,它破坏了拥有 OOP 和对象的用处,因为它们只是被简化为 POCO。

    因此,与其制作副本,使用只是多余且失去功能的内存,也许您可​​以调整输出层以按照您想要的方式呈现它?

    【讨论】:

    • 谢谢。它仅适用于像对象一样的数据读取器。但是要理解这个问题,阅读我之前的两个问题可能会非常有用。制作一些对象的副本只需要几个字节(因为对象的副本只是一个指向内存位置的 32 位整数)。但是你从我之前的问答中看到的一些 Linq 代码缺乏可读性可能会产生重大影响。输出层是下一步...
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多