C# 如果父id相同,则使用Linq查询合并子项

C# 如果父id相同,则使用Linq查询合并子项,c#,linq,C#,Linq,我有一节课 public class SelectionModel { public string Label { get; set; } public int Value { get; set; } } public class RiskFactorModel { public SelectionModel RiskFactor { get; set; } public int? RiskFactorI

我有一节课

public class SelectionModel
    {
        public string Label { get; set; }
        public int Value { get; set; }
    }

public class RiskFactorModel
    {
        public SelectionModel RiskFactor { get; set; }

        public int? RiskFactorIdParent { get; set; }

        public List<string> RiskFactorNameChild { get; set; }
    }


    public List<RiskFactorModel> LowRiskFactorModel { get; set; }
公共类选择模型
{
公共字符串标签{get;set;}
公共int值{get;set;}
}
公共类RiskFactorModel
{
公共选择模型风险因子{get;set;}
公共int?RiskFactoredParent{get;set;}
公共列表RiskFactorNameChild{get;set;}
}
公共列表LowRiskFactorModel{get;set;}
我想更新低风险系数模型。 检查每个值(在SelectionModel下),如果两个或多个值相同,则将RiskFactorNameChild合并为一个

如何在Linq中执行此操作?

您可以使用,通过
SelectionModel.Value
对元素进行分组,然后创建新的
RiskFactorModel
s组合组中所有元素的子名称:

var groupedModels = LowRiskFactorModel.GroupBy(m => m.RiskFactor.Value);
var mergedModels = groupedModels.Select(g => 
    new RiskFactorModel
    {
        RiskFactor = g.First().RiskFactor,
        RiskFactorIdParent = g.First().RiskFactorIdParent,
        RiskFactorNameChild = g.SelectMany(m => m.RiskFactorNameChild).ToList()
    }).ToList();
结果是一个
列表
,每个
风险因子.Value包含一个元素
,而
风险因子机械工具
列表包含所有具有该名称的源元素的组合列表。

尝试以下操作:

    public class RiskFactorModel
    {
        public static List<RiskFactorModel> LowRiskFactorModel { get; set; }

        public string RiskFactorName { get; set; }
        public List<string> RiskFactorNameChild { get; set; }


        public void Update()
        {
            var groups = LowRiskFactorModel.GroupBy(x => x.RiskFactorName).ToList();

            LowRiskFactorModel = groups.Select(x => new RiskFactorModel()
            {
                RiskFactorName = x.Key,
                RiskFactorNameChild = x.Select(y => y.RiskFactorNameChild.Select(z => z)).SelectMany(y => y).Distinct().ToList()
            }).ToList();
        }

    }
公共类风险因素模型
{
公共静态列表LowRiskFactorModel{get;set;}
公共字符串RiskFactorName{get;set;}
公共列表RiskFactorNameChild{get;set;}
公共无效更新()
{
var groups=lowsriskfactormodel.GroupBy(x=>x.RiskFactorName.ToList();
LowRiskFactorModel=组。选择(x=>new RiskFactorModel()
{
RiskFactorName=x.键,
RiskFactorNameChild=x.Select(y=>y.RiskFactorNameChild.Select(z=>z)).SelectMany(y=>y.Distinct().ToList()
}).ToList();
}
}

Sorry@Rene,我应该添加完整的型号。我了解SelectMany,但无法获得最终模型。您能看一下更新后的模型吗?
RiskFactorIdParent
?这应该如何合并?这可以是相同的值,就像RiskFactor一样。只有子项需要合并。确定更新了我的答案。