另一种方法是尝试编辑产品列表中的每个产品的第一个实例,将所有实例的颜色都添加进去,而不需要创建一个新的匿名类型来保存数据(根据被接受的答案)。
完整代码:
public class Program
{
public static void Main()
{
List<Product> products = new List<Product>
{
new Product() {Id = 1, Name="name1", Color="Blue"},
new Product() {Id = 1, Name="name1", Color="Green"},
new Product() {Id = 1, Name="name1", Color="Green"},
new Product() {Id = 2, Name="name2", Color="Red"}
};
var results = from product in products
group product by product.Id into g
let colors = string.Join(",", g.Select(c=> c.Color).Distinct())
let p = g.First().Color = colors
select g.First();
foreach(var result in results)
Console.WriteLine(result);
}
}
public class Product
{
public int Id;
public string Name;
public string Color;
public override string ToString()
{
return string.Format("Id:\"{0}\", Name:\"{1}\", Color:\"{2}\"", Id, Name, Color);
}
}
这将直接更改id=1的第一个产品实例的“Color”属性值,丢弃列表中的任何其他实例。
它将打印:
Id:"1", Name:"name1", Color:"blue,Green"
Id:"2", Name:"name2", Color:"Red"
可运行的代码:https://dotnetfiddle.net/HLtHIE
我并不声称这是更好或更高效的,但它是一个值得考虑的替代方案。