C#返回具有匹配属性的对象列表[重复]

Posted

技术标签:

【中文标题】C#返回具有匹配属性的对象列表[重复]【英文标题】:C# Return list of objects with matching attributes [duplicate] 【发布时间】:2020-10-14 20:31:50 【问题描述】:

我有以下对象:

class Car
   int price;
   string color;
   string size;


var list = new List<Car>();
list.Add...//add 20 cars

//I now want to select from this list any cars whose color and size matches that of any other car

list.Select(car => String.Join(car.color, car.size)) 

我想从此列表中选择一组字符串(颜色 + 大小),这些字符串存在于列表中的不止一辆汽车中

不知道在哪里继续使用 linq,因为我一直在努力解决这个问题

【问题讨论】:

您希望结果是符合条件的汽车实例列表,还是符合条件的汽车的颜色+尺寸字符串列表? 您的问题并不完全清楚,但似乎您想要“颜色”和“大小”的组合,然后生成所有匹配的集合。见GroupBy();特别是,在正确的键上进行分组(不是下面非常差的答案中显示的示例),然后仅返回组中元素计数大于一的那些组。参见重复分组。 【参考方案1】:
var groupedCars = list.
    GroupBy(c => c.color + c.size, c => c).
    Where(g => g.Count() > 1);

【讨论】:

【参考方案2】:

你应该先group the listcolorsize,然后选择Count大于1的项目

var result = list
    .GroupBy(c => string.Join(c.color, c.size))
    .Where(g => g.Count() > 1)
    .Select(g => g.Key)
    .ToList();

另外,您应该将colorsize 标记为public 字段(或使用属性,这是更好的选择)

【讨论】:

以上是关于C#返回具有匹配属性的对象列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何对集合中所有对象的属性执行.Max()并返回具有最大值的对象[重复]

C#使用列表属性展平对象列表[重复]

按字符串属性C#对对象列表进行排序[重复]

根据具有不同对象的匹配字段从数组列表中删除重复元素

删除列表中的重复对象 (C#)

使用 C# 返回具有重复键的 Json 对象