2012-04-11 1 views
2

Допустим, у меня есть список объекта, как это:Использование LINQ для проецирования списка клавише/кол-2-мерный массив

var users = new List<User>(); 
users.Add(new User() { FirstName = "Ek0nomik" }); 
users.Add(new User() { FirstName = "Ek0nomik" }); 
users.Add(new User() { FirstName = "Foobar" }); 

Я пытаюсь получить 2-мерный массив, который содержит имя и счет этого имени (с целью вернуть его в качестве JSON с использованием в Google Charts) из этого списка. Это то, что массив будет содержать:

["Ek0nomik", 2], 
["Foobar", 1] 

я изначально пытался использовать .Select проекта нового объекта, но проекты для каждого объекта в списке, так что я не думаю, что этот метод получит меня там.

ответ

6
users.GroupBy(x => x.FirstName) 
    .Select(x => new { Name = x.Key, Count = x.Count() }) 
+1

Отличный пример! Есть ли способ получить массив без имен свойств? В моей ситуации они фактически не нужны. –

+0

Извините, я не могу понять ваш вопрос. Это что-то вроде '.Select (x => x.Count())'? –

+0

Ваш пример приводит к массиву анонимного объекта по сравнению с многомерным массивом. Ваш пример дает мне 99%, так как я могу работать с массивом объектов, чтобы построить то, что мне нужно; Мне просто интересно, можно ли сразу создать многомерный массив. –

1

Как насчет этого?

var asd = users.GroupBy(x => x.FirstName).Select(x => new {Name = "['" + x.Key + "', "+ x.Count() + "]"}); 
foreach (var t in asd) 
{ 
Console.WriteLine(t.Name); 
} 
0
var groupedUsers = users.GroupBy(x => x.FirstName) 
      .Select(x => new { Name = x.Key, Count = x.Count() }); 
var dictionary = groupedUsers.ToDictionary(u=>u.Name, u=>u.Count); 


var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
var output = serializer.Serialize(dictionary); 

Результат будет выглядеть

{"Ek0nomik":2,"Foobar":1} 

И сделать charts с JSON.

Если вы используете Методы страниц или WebService, строки с JavaScriptSerializer не нужны, только словарь для создания этого JSON.