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一样。只有子项需要合并。确定更新了我的答案。