LINQ,组合具有类似值的项目

时间:2010-11-02 20:06:07

标签: c# linq

假设我有这样的收藏..

var list = new List<Item>
{
 new Item
 { 
  Name = "Software",
  Price = 100
 },
 new Item
 {
  Name = "Software",
  Price = 200
 },
 new Item
 {
  Name = "Hardware",
  Price = 100
 }
};

并且'名称'不会被人知道,我想写一个LINQ查询,它将返回一个具有匹配名称的所有内容的列表。我不能使用“选择”,因为这些名称在设计时也不知道。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我不完全确定您是要过滤还是对结果进行分组。

如果要过滤,可以将Where与运行时提供的名称一起使用:

string nameToFind = GetTheNameToFind(); // Can come from user, config, etc
var matches = list.Where(item => item.Name == nameToFind);

如果您想按所有名称分组(例如:有2个软件+ 1个硬件元素),您可以使用Enumerable.GroupBy

var groups = list.GroupBy(item => item.Name);

foreach(var group in groups)
{
    Console.WriteLine("Group {0}:", group.Key);
    foreach(var item in group)
         Console.WriteLine("    Item: {0} - {1}", item.Name, item.Price);
}

答案 1 :(得分:0)

你正在寻找这个吗?您可以使用Where方法过滤可枚举。
name变量可以在运行时定义。

string name = "Software";
List<Item> newList = list.Where(item => item.Name == name).ToList();