Linq分组依据:从结果中删除密钥

时间:2018-10-11 15:40:31

标签: c# sql linq

Linq group by与SQL有很大的不同(因为它可以在对象上而不是在元组上工作)并且在一开始就不太直观。我很想编写一个小函数以将其放入像MoreLinq这样的框架中。

样本数据

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

enter image description here

您可以找到此示例数据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},其中“属性数据”包含除分组中使用的列以外的所有列。

enter image description here

是否可以概括这种操作?

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

1 个答案:

答案 0 :(得分:1)

虽然可以进行一堆反射,但它仅对少量仅数据对象有用。

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

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

因此,与其复制一个副本,不使用内存,而是多余的并且失去了功能,也许您可​​以调整输出层,使其以您想要的方式呈现?