Вывести список / другую структуру данных, используя запрос linq - PullRequest
6 голосов
/ 07 июля 2011

есть ли способ сделать Console.WriteLine () в универсальной коллекции пример: Список имеет:

a.Key[0]: apple
a.Value[0]: 1

a.Key[1]: bold
a.Value[2]: 2

Есть ли способ выписать содержимое списка: ключ, значение с помощью LINQ?

a = a.OrderByDescending (x => x.Value));

foreach (KeyValuePair pair in car) 
{ 
    Console.WriteLine(pair.Key + ' : ' + pair.Value); 
} 

Вместо foreach я хочу написать Linq / запрос ... Является ли это возможным?

Ответы [ 3 ]

12 голосов
/ 07 июля 2011

Если вы думаете об этом, вы на самом деле не запрашиваете запрос. Запрос по существу задает вопрос о данных, а затем выстраивает ответ определенным образом. Однако то, что вы делаете с этим ответом, не зависит от его генерации.

В вашем случае «вопрос» является частью запроса «каковы мои данные?» (поскольку вы не применили предложение Where), а часть «расположение» - «в порядке убывания на основе значения каждого элемента». Вы получаете IEnumerable<T>, который при перечислении выплевывает ваш "ответ".

На этом этапе вам действительно нужно что-то сделать с ответом, поэтому вы перечисляете его с помощью цикла foreach, а затем выполняете любые необходимые действия с каждым элементом (как вы делаете в своем вопросе). Я думаю, что это это совершенно разумный подход, который дает понять, что происходит.

Если вам абсолютно необходимо использовать запрос LINQ, вы можете сделать это:

a.OrderByDescending(x => x.Value).ToList().ForEach(x => { Console.WriteLine(x.Key + ' : ' + x.Value); });

РЕДАКТИРОВАТЬ : Это сообщение в блоге содержит больше.

8 голосов
/ 07 июля 2011

Существует метод расширения, который сам по себе перебирает значения:

 myList.ForEach(a => {
      // You have access to each element here, but if you try to debug, this is only one function and won't be iterated in debug mode.
 });

Также вы можете использовать агрегатные функции ссылки для объединения строк:

 Console.WriteLine(myList.Aggregate((a, b) => string.Format("{0}, {1}", a, b)));
3 голосов
/ 07 июля 2011

Вы можете создать строку, используя LINQ, и затем вывести ее на консоль. Пример:

var s=string.Join(Environment.NewLine, a.Select(x=>string.Format("{0}:{1}",x.Key,x.Value)).ToArray());
Console.WriteLine(s);
...