使用Linq连接对象列表中的字符串属性
本文关键字:字符串 属性 列表 Linq 连接 对象 使用 | 更新日期: 2023-09-27 18:11:52
我有一组这样的对象:
class ObjectA
{
public string NameA {get;set;}
public List<ObjectB> ListObjectB {get;set;}
}
class ObjectB
{
public string NameB {get;set;}
public ObjectBDetails Details {get;set;}
}
class ObjectBDetails
{
public string Code {get;set;}
public string Sector {get;set;}
}
我有一个ObjectA
的List
,里面有几个项目。
我喜欢做的是获得所有项目的Sector
字符串,并将其写成逗号分隔的字符串。
例如,我可以这样写:
string tmp = "";
foreach(var objA in ListObjectA)
{
foreach(var objB in objA.ListObjectB)
{
tmp += objB.ObjectDetails.Sector + ", ";
}
}
这个"会"工作。唯一的问题是它总是以,
结尾,这不是很好。
但我也认为有一个更好的解决方案来做到这一点与Linq
。但我不知道该怎么做。我试过这样做,但显然没有成功:
var a = objA.ListObjectB.Aggregate((current, next) => current.ObjectBDetails.Sector + ", " + next.ObjectBDetails.Sector);
所以我实际上正在寻找一种方法来做到这一点与Linq
。有人知道怎么做吗?
您可以使用string.Join
和LINQ SelectMany
组合:
var a = string.Join(", ", ListObjectA.SelectMany(x => x.ListObjectB)
.Select(x => x.Details.Sector));
对于数据:
var ListObjectA = new List<ObjectA>();
ListObjectA.Add(new ObjectA()
{
ListObjectB = new List<ObjectB>() {
new ObjectB() { Details = new ObjectBDetails() { Sector = "A1" }},
new ObjectB() { Details = new ObjectBDetails() { Sector = "A2" }},
}
});
ListObjectA.Add(new ObjectA()
{
ListObjectB = new List<ObjectB>() {
new ObjectB() { Details = new ObjectBDetails() { Sector = "B1" }}
}
});
产生"A1, A2, B1"
试试这个:
var a = objA.ListObjectB.Aggregate((current, next) => current.Sector + ", " + next.Sector);