2010-11-02 2 views
2

Предполагая, что у меня была коллекция, как это ..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

Извините, ваш вопрос действительно не ясен - особенно с точки зрения того, что известно или неизвестно во время компиляции. Вы привезли пример коллекции, но что вы пытаетесь сделать с ней? Дайте образец ввода и желаемый результат. –

ответ

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); 
} 
+0

+1 для добавления ответа. – Nix

0

Вы ищете это? Вы можете использовать метод Where для фильтрации перечислимых.
name переменная может быть определена во время выполнения.

string name = "Software"; 
List<Item> newList = list.Where(item => item.Name == name).ToList(); 
Смежные вопросы