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连接该搭配中的所有项目中的颜色。知道怎么做吗?
答案 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));
其他信息:
在这种情况下,您可以使用Aggregate
或String.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));
}
}