Linq group by与SQL有很大的不同(因为它可以在对象上而不是在元组上工作)并且在一开始就不太直观。我很想编写一个小函数以将其放入像MoreLinq这样的框架中。
假设我们有一个带有匿名类型的c#列表或一个带有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);
答案 0 :(得分:1)
虽然可以进行一堆反射,但它仅对少量仅数据对象有用。
对于大量存储,基本上复制所有对象可能不利于应用程序的内存消耗。
对于所有不是POCO的对象,由于它们只是被简化为POCO,因此破坏了拥有OOP和对象的用途。
因此,与其复制一个副本,不使用内存,而是多余的并且失去了功能,也许您可以调整输出层,使其以您想要的方式呈现?