C# 使用LINQ如何从列表中的列表中进行选择 公共类标准跟踪输出 { 公共字符串MainCommitee{get;set;} 公共列表子委员会{get;set;} } 公共类小组委员会 { 公共字符串格式化委员会{get;set;} 公共字符串提交{get;set;} }
我想从列表中生成StandardTrackingOutput,该列表包含代表MainCommittee的MainCommittee、FormattedCommittee和CommitteeTile列 我有以下数据:[在这里输入图像描述][1] 主要委员会成立委员会委员会 ABC数据1 ABC.01数据2 ABC.02数据3 ABC.03数据4 XYZ XYZ数据20 XYZ XYZ.09数据16 XYZ XYZ.08数据5 我想返回StandardTrackingOutput的列表 提前感谢您的帮助您应该C# 使用LINQ如何从列表中的列表中进行选择 公共类标准跟踪输出 { 公共字符串MainCommitee{get;set;} 公共列表子委员会{get;set;} } 公共类小组委员会 { 公共字符串格式化委员会{get;set;} 公共字符串提交{get;set;} },c#,linq,C#,Linq,我想从列表中生成StandardTrackingOutput,该列表包含代表MainCommittee的MainCommittee、FormattedCommittee和CommitteeTile列 我有以下数据:[在这里输入图像描述][1] 主要委员会成立委员会委员会 ABC数据1 ABC.01数据2 ABC.02数据3 ABC.03数据4 XYZ XYZ数据20 XYZ XYZ.09数据16 XYZ XYZ.08数据5 我想返回StandardTrackingOutput的列表 提前感谢您的
main提交
并生成预期结果:
public class StandardTrackingOutput
{
public string MainCommitee { get; set; }
public List<SubCommittees> SubCommittees { get; set; }
}
public class SubCommittees
{
public string FormattedCommittee { get; set; }
public string CommitteeTitle { get; set; }
}
列表结果=委员会
.GroupBy(x=>x.MainCommitee)
.选择(x=>new StandardTrackingOutput
{
MainCommitee=x.键,
子委员会=x。选择(y=>新的子委员会
{
委员会=y.委员会,
FormattedCommittee=y.FormattedCommittee
})托利斯先生()
})
.ToList();
基本上你是在做一个GroupBy:
List<StandardTrackingOutput> result = committees
.GroupBy(x => x.MainCommitee)
.Select(x => new StandardTrackingOutput
{
MainCommitee = x.Key,
SubCommittees = x.Select(y => new SubCommittees
{
CommitteeTitle = y.CommitteeTitle,
FormattedCommittee = y.FormattedCommittee
}).ToList()
})
.ToList();
void Main()
{
var myData=新列表{
新MyData{main committee=“ABC”,FormattedCommittee=“ABC”,committeetite=“Data1”},
新MyData{main committee=“ABC”,FormattedCommittee=“ABC.01”,committeetite=“Data2”},
新MyData{main committee=“ABC”,FormattedCommittee=“ABC.02”,committeetite=“Data3”},
新MyData{main committee=“ABC”,FormattedCommittee=“ABC.03”,committeetite=“Data4”},
新MyData{main committee=“XYZ”,FormattedCommittee=“XYZ”,CommitteeTitle=“Data20”},
新的MyData{main committee=“XYZ”,FormattedCommittee=“XYZ.09”,committeetite=“Data16”},
新的MyData{main committee=“XYZ”,FormattedCommittee=“XYZ.08”,committeetite=“Data5”},
};
var result=myData.GroupBy(d=>d.MainCommitee)
.选择(d=>new StandardTrackingOutput
{
MainCommittee=d.键,
小组委员会=d.选择(s=>
新的小组委员会
{
FormattedCommittee=s.FormattedCommittee,
委员会=s.委员会
})
托利斯先生()
});
//如果您有LinqPad(为什么没有)
//result.Dump();
}
公共类标准跟踪输出
{
公共字符串MainCommitee{get;set;}
公共列表子委员会{get;set;}
}
公共类小组委员会
{
公共字符串格式化委员会{get;set;}
公共字符串提交{get;set;}
}
公共类MyData
{
公共字符串MainCommitee{get;set;}
公共字符串格式化委员会{get;set;}
公共字符串提交{get;set;}
}
为什么你不能呢?这不是一个代码编写服务。先试试你自己,明确地问什么不起作用你对列表的是什么意思?那么,您希望转换为列表的源是什么?
void Main()
{
var myData = new List<MyData> {
new MyData{ MainCommitee="ABC", FormattedCommittee="ABC", CommitteeTitle="Data1" },
new MyData{ MainCommitee="ABC", FormattedCommittee="ABC.01", CommitteeTitle="Data2" },
new MyData{ MainCommitee="ABC", FormattedCommittee="ABC.02", CommitteeTitle="Data3" },
new MyData{ MainCommitee="ABC", FormattedCommittee="ABC.03", CommitteeTitle="Data4" },
new MyData{ MainCommitee="XYZ", FormattedCommittee="XYZ", CommitteeTitle="Data20" },
new MyData{ MainCommitee="XYZ", FormattedCommittee="XYZ.09", CommitteeTitle="Data16" },
new MyData{ MainCommitee="XYZ", FormattedCommittee="XYZ.08", CommitteeTitle="Data5" },
};
var result = myData.GroupBy(d => d.MainCommitee)
.Select(d => new StandardTrackingOutput
{
MainCommitee = d.Key,
SubCommittees = d.Select(s =>
new SubCommittees
{
FormattedCommittee = s.FormattedCommittee,
CommitteeTitle = s.CommitteeTitle
})
.ToList()
});
// if you have LinqPad (why not)
// result.Dump();
}
public class StandardTrackingOutput
{
public string MainCommitee { get; set; }
public List<SubCommittees> SubCommittees { get; set; }
}
public class SubCommittees
{
public string FormattedCommittee { get; set; }
public string CommitteeTitle { get; set; }
}
public class MyData
{
public string MainCommitee { get; set; }
public string FormattedCommittee { get; set; }
public string CommitteeTitle { get; set; }
}