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

本文关键字:创建 列表 LINQ 于相关 对象 | 更新日期: 2023-09-27 18:20:18

我有以下类(为了清晰起见,简化了):

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/Name:"一周中的几天之间"

Id:2/名称:"匹配类别Id"

规则模板

Id:1/规则:(在规则Id 1之上分配)/描述:"从一周中的某一天开始"

Id:2/规则:(在规则Id1之上分配)/描述:"到一周中的某一天"

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

第一个CCD_ 2具有分配给它的2个RuleTemplates(并且这些RuleTemplates中的每一个具有分配的1个RuleInstance)。

第二个Rule只有1个RuleTemplate被分配给它,它有1个RuleInstance被分配给那个。

因此,如果我有一个基于上述数据的List<RuleInstance>我希望能够生成一个具有分组的底层RuleTemplatesList<Rule>(并且这些分组的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

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

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

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

这将使您从List<RuleInstance>获得List<Rule>