连接中的对象的连接属性。

时间:2015-10-11 04:35:32

标签: c# linq

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 个答案:

答案 0 :(得分: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,因此它将是最佳选择

答案 1 :(得分:1)

尝试:

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

答案 2 :(得分: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));
    }
}