基于相关对象使用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>
,我希望能够生成一个具有分组的底层RuleTemplates
的List<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
通过一条简单而直线,您可以获得所需的结果:
LstRuleInstance.Select(ri => ri.RuleTemplate.Rule).Distinct();
这将使您从List<RuleInstance>
获得List<Rule>
。