集合中对象的连接属性。

3
public class Item
{
   public string id { get; set;}
   public string Color { get; set;}
}

public class Test
{
    public ICollection<Item> Items { get; set; }

    public void ConCat
    {
        string a = ?
    }
}

我有以上的类结构,我想使用LINQ连接该集合中所有项中的颜色。 有什么想法吗?
3个回答

3

尝试:

string a = string.Join(";", Items.Select(item => item.Color));

2

试试这个:

var res = yourList.Select(x => x.Name).Aggregate((current, next) => current + ", " + next);

但是,我建议您使用 String.Join(string separator, IEnumerable<string> values)

var res = String.Join(";", yourList.Select(x => x.Name));

附加信息

在这种情况下,您可以使用 AggregateString.Join()。如果我们测试这两个查询的执行时间,我们会发现第二个比第一个更快。但原因不是 Aggregate() 函数。问题在于我们在循环中连接字符串。这将导致大量中间字符串,从而导致性能不佳。如果您仍想使用 Aggregate 并提高性能,可以使用 StringBuilder.Append

var res = yourList.Select(x => x.Name)
                   .Aggregate(new StringBuilder(), (current, next) => current.Append(next).Append(", "))

但是,String.Join() 内部已经使用了 StringBuilder,因此它将是最好的选择。


0
您可以返回一个逗号分隔的所有颜色的字符串。使用String.Join将字符串与,分隔符连接,如下所示。
public class Item
{
   public string id { get; set;}
   public string Color { get; set;}
}

public class Test
{
    public ICollection<Item> Items { get; set; }

    public string AllColors()
    {
        return string.Join(",", Items.Select(i => i.Color));
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接