基于相关对象使用LINQ创建分组列表

时间:2015-11-03 12:12:10

标签: c# .net linq

我有以下课程(为简洁起见而简化):

public class Rule
{
    public int Id { get; set; }

    public string Name  { get; set; }

    public List<RuleTemplate> RuleTemplates { get; set; }
}

public class RuleTemplate
{
    public int Id { get; set; }

    public Rule Rule { get; set; }

    public string Description  { get; set; }
}

public class RuleInstance
{
    public int Id { get; set; }

    public string RuleValue { get; set; }

    public RuleTemplate RuleTemplate { get; set; }
}

想象一下,我有以下与这些对象相关的数据:

规则

Id:1 /姓名:“在几天之间”

Id:2 /姓名:“匹配类别ID”

RuleTemplate

Id:1 /规则:(在规则ID 1之上指定)/描述:“从周日开始”

Id:2 /规则:(在规则ID 1之上分配)/描述:“到星期几”

Id:3 /规则:(在规则ID 2之上分配)/描述:“类别ID”

RuleInstance

Id:1 / RuleValue:“Monday”/ RuleTemplate :(在RuleTemplate Id 1上方指定)

Id:2 / RuleValue:“Friday”/ RuleTemplate :(在RuleTemplate Id 2上面指定)

Id:3 / RuleValue:300 / RuleTemplate :(在RuleTemplate Id 3之上分配)

所以在这里我基本上得到了两个不同的Rules

第一个Rule已为其分配了2个RuleTemplates(并且每个RuleTemplates分配了1个RuleInstance

第二个Rule只分配了一个RuleTemplate,其中分配了RuleInstance个。{/ p>

所以,如果我根据上述数据得到List<RuleInstance>我希望能够生成一个List<Rule>,其中包含基础RuleTemplates (并且每个分组RuleTemplates以便附加关联的RuleInstances

所以在这种情况下,我会得到一个2 Rules的列表,关联的对象看起来如下所示:

--Rule Id 1

----RuleTemplate Id 1

------RuleInstance Id 1

----RuleTemplate Id 2

------RuleInstance Id 2

--Rule Id 2

----RuleTemplate Id 3

------RuleInstance Id 3

1 个答案:

答案 0 :(得分:1)

通过简单直线,您可以获得所需的结果:

LstRuleInstance.Select(ri => ri.RuleTemplate.Rule).Distinct();

这样可以从List<Rule>获得List<RuleInstance>