C# LINQ中的多级分组?

C# LINQ中的多级分组?,c#,linq,C#,Linq,我有一个具有以下结构的记录列表:(简化示例!) 是的,我已经定义了一个列表。我需要将此列表转换为以下简化结构: class RateList { List<Code> code; } class Code { string code; List<Interest> interest; } class Interest { double InterestFrom; double InterestTo; List<Incom

我有一个具有以下结构的记录列表:(简化示例!)

是的,我已经定义了一个列表。我需要将此列表转换为以下简化结构:

class RateList
{
   List<Code> code;
}
class Code
{
    string code;
    List<Interest> interest;
}
class Interest
{
    double InterestFrom;
    double InterestTo;
    List<Income> income;
}
class Income
{
    double IncomeFrom;
    double IncomeTo;
    double Value;
}
等级费率表
{
列表<代码>代码;
}
类别代码
{
字符串代码;
上市利益;
}
阶级利益
{
双重利益;
双利;
收入清单;
}
阶级收入
{
双重收入;
双重收入;
双重价值;
}
我想用一个LINQ查询来实现这一点。我可以想出其他的解决方案,但挑战是在一个LINQ声明内完成。 基本上,顶级组是按代码分组的。下一级由值InterestFrom和InterestTo组成,最低一级是IncomeFrom、IncomeTo和Value的列表


那么,LINQ对此的声明是什么呢?

这是非常巨大的,但以下是我的:

var rateList = new RateList
               {
                   code = (from r in rates
                           group r by r.Code into g
                           select new Code
                           {
                               code = g.Key,
                               interest = (from i in g
                                           group i by new {i.InterestFrom, i.InterestTo} into g2
                                           select new Interest
                                           {
                                               InterestFrom = g2.Key.InterestFrom,
                                               InterestTo = g2.Key.InterestTo,
                                               income = (from inc in g2
                                                         select new Income
                                                         {
                                                             IncomeFrom = inc.IncomeFrom,
                                                             IncomeTo = inc.IncomeTo,
                                                             Value = inc.Value
                                                         }).ToList()
                                           }).ToList()
                           }).ToList()
               };

您能提供输入速率和期望输出的列表吗?期望输出是RateList类型的单个对象。InterestFrom/InterestTo和IncomeFrom/IncomeTo是每个代码的重复值。一个示例记录是:(“AB”、0、6、10000、20000、40.3)或(“AB”、6、7.5、10000、20000、40.3)。您提到“最低级别按IncomeFrom和IncomeTo分组。”-如果是这种情况,是否将
s相加?或者你不是真的想把这些价值观归为一组吗?(停在利息旁)@Ryan Versaw,你说得对。最低的水平是利息,而不是收入。数额巨大没有问题。:-)我只是想知道它是否可以在一个语句中完成。(然后检查它是否可读…)这是我现在能想到的最简洁的方法。我所知道的缩短它的唯一好方法是在这些类上使用一些简单的构造函数。它不会删减太多,但会有一点帮助。并且检查了代码!它起作用了!这是一个怪兽式的声明,但我想再次劝阻经验不足的开发人员修改它。老实说,它仍然可读性很强,其实不需要缩短。但是,修改构造函数是不可能的,因为我使用的类不是由我创建的。尽管如此,只要使用宽屏幕,最终代码仍不到30行,并且仍然可读。:-)(基本上,我填充这个结构是为了将其传递给第三方模块,第三方模块可能会再次将其转换回平面表格。)
var rateList = new RateList
               {
                   code = (from r in rates
                           group r by r.Code into g
                           select new Code
                           {
                               code = g.Key,
                               interest = (from i in g
                                           group i by new {i.InterestFrom, i.InterestTo} into g2
                                           select new Interest
                                           {
                                               InterestFrom = g2.Key.InterestFrom,
                                               InterestTo = g2.Key.InterestTo,
                                               income = (from inc in g2
                                                         select new Income
                                                         {
                                                             IncomeFrom = inc.IncomeFrom,
                                                             IncomeTo = inc.IncomeTo,
                                                             Value = inc.Value
                                                         }).ToList()
                                           }).ToList()
                           }).ToList()
               };