C # LINQ порядок на одном слоте массива объектов - PullRequest
0 голосов
/ 22 февраля 2011

У меня есть функция, которая возвращает List<object[]>. Я хотел бы сгруппировать по первому слоту в объекте и отсортировать по 2-му. Я заставил групповую часть работать, но не могу понять, что синтаксис сортировки правильный. Код ниже правильно группирует результат. Я бы хотел, чтобы каждая отдельная группа сортировалась по дате (2-й слот oject []). Кто-нибудь знает синтаксис для этого?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;    
namespace Linq_Object_Array_Test
{
    class Program
    {
        static void Main(string[] args)
        {            
            List<object[]> data = new List<object[]>();    
            data.Add(new object[3] { "6752 JT", new DateTime(2011, 1, 12), 3690 });
            data.Add(new object[3] { "6752 JT", new DateTime(2011, 1, 13), 3600 });
            data.Add(new object[3] { "7630 JT", new DateTime(2011, 1, 11), 789 });
            data.Add(new object[3] { "6752 JT", new DateTime(2011, 1, 11), 3694 });
            data.Add(new object[3] { "7630 JT", new DateTime(2011, 1, 12), 780 });
            data.Add(new object[3] { "7630 JT", new DateTime(2011, 1, 13), 769 });
            data.Add(new object[3] { "8719 JT", new DateTime(2011, 1, 11), 43200 });

            // correctly groups by symbol of security
            var query = data.GroupBy(o => o[0]);

            foreach (var item in query)
            {
                Console.Write(item.Key.ToString() + "\n");    
                foreach (var item2 in item)                    
                    Console.Write("  {0}  {1}  {2} \n", item2[0].ToString(), item2[1].ToString(), item2[2].ToString());      
                Console.Write("\n");
            }
        }
    }
}

Любая помощь будет наиболее ценной.

Ответы [ 2 ]

3 голосов
/ 22 февраля 2011

Расширение Enumerable.OrderBy - это то, что вы ищете:

var query = data.OrderBy(o => o[1]).GroupBy(o => o[0]);
1 голос
/ 22 февраля 2011

Я бы действительно решил использовать анонимный тип (или создать отдельный класс) вместо использования List<Object>. Это даст вам более читабельный код и безопасность типов.

Как это:

var data = new[]{
new { Id = "6752 JT", Date = new DateTime(2011, 1, 12), Num = 3690 },
new { Id = "6752 JT", Date = new DateTime(2011, 1, 13), Num = 3600 },
...,
};

var query = data.OrderBy(o => o.Date).GroupBy(o => o.Id);
...