LINQ与某些XML节点不同

时间:2014-01-09 18:51:41

标签: c# linq group-by

我有一个名为Rate[]的对象。这是来自返回名为Rate[]的Object的Web Service。 Rate[]的XML如下所示:

<b:Rate>
    <b:Deductible>0</b:Deductible>
    <b:FormType>AO</b:FormType>
    <b:PlanCode>843</b:PlanCode>
    <b:Miles>0</b:PlanMiles>
    <b:PlanTerm>1</b:PlanTerm>
    <b:Prefix>PR</b:Prefix>
    <b:Retail>269</b:Retail>
    <b:RiskPlan>RPR1</b:RiskPlan>
    <b:Term>1/3</b:Term>
</b:Rate>
<b:Rate>
    <b:Deductible>0</b:Deductible>
    <b:FormType>AO</b:FormType>
    <b:PlanCode>843</b:PlanCode>
    <b:Miles>0</b:PlanMiles>
    <b:PlanTerm>2</b:PlanTerm>
    <b:Prefix>PR</b:Prefix>
    <b:Retail>269</b:Retail>
    <b:RiskPlan>RPR1</b:RiskPlan>
    <b:Term>1/3</b:Term>
</b:Rate>
<b:Rate>
    <b:Deductible>0</b:Deductible>
    <b:FormType>AO</b:FormType>
    <b:PlanCode>843</b:PlanCode>
    <b:Miles>0</b:PlanMiles>
    <b:PlanTerm>3</b:PlanTerm>
    <b:Prefix>PR</b:Prefix>
    <b:Retail>269</b:Retail>
    <b:RiskPlan>RPR1</b:RiskPlan>
    <b:Term>1/3</b:Term>
    <b:VehicleClass>1</b:VehicleClass>
</b:Rate>
<b:Rate>
    <b:Deductible>0</b:Deductible>
    <b:FormType>AO</b:FormType>
    <b:PlanCode>843</b:PlanCode>
    <b:Miles>0</b:PlanMiles>
    <b:PlanTerm>4</b:PlanTerm>
    <b:Prefix>PR</b:Prefix>
    <b:Retail>269</b:Retail>
    <b:RiskPlan>RPR2</b:RiskPlan>
    <b:Term>4/6</b:Term>
</b:Rate>
<b:Rate>
    <b:Deductible>0</b:Deductible>
    <b:FormType>AO</b:FormType>
    <b:PlanCode>843</b:PlanCode>
    <b:Miles>0</b:PlanMiles>
    <b:Term>5</b:PlanTerm>
    <b:Prefix>PR</b:Prefix>
    <b:Retail>269</b:Retail>
    <b:RiskPlan>RPR2</b:RiskPlan>
    <b:Term>4/6</b:Term>
</b:Rate>
<b:Rate>
    <b:Deductible>0</b:Deductible>
    <b:FormType>AO</b:FormType>
    <b:PlanCode>843</b:PlanCode>
    <b:Miles>0</b:PlanMiles>
    <b:PlanTerm>6</b:PlanTerm>
    <b:Retail>269</b:Retail>
    <b:RiskPlan>RPR2</b:RiskPlan>
    <b:Term>4/6</b:Term>
</b:Rate>
    ... etc ..
<b:Rate>
    <b:Deductible>0</b:Deductible>
    <b:FormType>AO</b:FormType>
    <b:PlanCode>843</b:PlanCode>
    <b:Miles>0</b:PlanMiles>
    <b:PlanTerm>84</b:PlanTerm>
    <b:Retail>269</b:Retail>
    <b:RiskPlan>RPR2</b:RiskPlan>
    <b:Term>73/84</b:Term>
</b:Rate>

这些价​​格具有相同的价格。

我不想显示1 ... 2 ... 3 ... 4 ...一直到84个术语,我想使用费率中的<Term>对这些费率进行分组。

示例:将所有<Term>1/3</Term>分组在一起。

注意:也有不同的<RiskPlan>:RPR1,RPR2和RPR3也需要考虑。

我目前有:

var ratesGroupBy = from r in rates.GroupBy(r => new { r.Term }).Select(g => g.First())
                    select r;

我的问题是

这只返回RPR1和唯一条款。它还需要考虑不同的RiskPlans及其独特的条款。

RPR1 => 1/3, 4/6, 7/9, 10/12, etc...
RPR2 => 1/3, 4/6, 7/9, 10/12, etc...
RPR3 => 1/3, 4/6, 7/9, 10/12, etc...

1 个答案:

答案 0 :(得分:0)

var ratesGroupBy = rates.GroupBy(x => x.RiskPlan)
                        .Select(g => new { RiskPlan = g.Key, Terms = g.Select(x => x.Term).Distinct().ToList() })
                        .ToList();

返回具有string RiskPlanList<string> Terms属性的匿名类型实例列表。