繁体   English   中英

使用Linq连接对象列表中的字符串属性

[英]Join a string property which is in a List of objects using Linq

我有一组这样的对象:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM