假设我有这样的收藏..
var list = new List<Item>
{
new Item
{
Name = "Software",
Price = 100
},
new Item
{
Name = "Software",
Price = 200
},
new Item
{
Name = "Hardware",
Price = 100
}
};
并且'名称'不会被人知道,我想写一个LINQ查询,它将返回一个具有匹配名称的所有内容的列表。我不能使用“选择”,因为这些名称在设计时也不知道。
有什么想法吗?
答案 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();