2015-11-03 63 views
-1

我有以下类(简化为清楚起见):创建使用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/Name:“Between Days of Week”

Id:2/Name:“Match Category Id”

RuleTemplate

ID:1 /规则: “从星期几”

。ID:2 /规则:/描述(上文规则标识1分配)(上述规则标识1分配) /说明: “星期几的影响”

ID:3 /规则:/描述(上文规则标识2分配): “类别ID”

RuleInstance

ID:1/RuleValue: “星期一”/ RuleTemplate:

ID(以上RuleTemplate标识1分配):2/RuleValue: “星期五”/ RuleTemplate:(以上RuleTemplate编号分配2)

标识:3/RuleValue:300/RuleTemplate :(分配在RuleTemplate Id 3以上)

所以在这里我基本上有两个不同的Rules

第一个Rule有2 RuleTemplates分配给它(并且这些RuleTemplates中的每一个都被分配了1 RuleInstance)。

第二个Rule只有1 RuleTemplate分配给它,其中有1 RuleInstance分配给它。

所以,如果我有一个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

为什么不只是做'LstRuleInstance.Select(ri => ri.RuleTemplate.Rule).Distinct()'用那么简单的线条就可以得到想要的'List '是不是? – frikinside

+1

我的主要监督。卫生署!谢谢。如果你把这个作为答案,我会接受它,谢谢! – marcusstarnes

+1

有时我们不缺乏知识,我们只需要另一对或眼睛;) – frikinside

回答

1

通过简单和直线就可以达到预期的效果:

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

这会让你从List<RuleInstance>List<Rule>