C#LINQ orderby在对象数组的单个插槽上

时间:2011-02-22 10:19:31

标签: c# linq sql-order-by

我有一个返回List<object[]>的函数。我想按对象中的第一个插槽进行分组,然后按第二个插槽进行排序。我已经让小组部分工作,但似乎无法使排序语法正确。下面的代码正确地分组结果。我希望每个组按日期排序(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 个答案:

答案 0 :(得分:3)

Enumerable.OrderBy扩展名是您寻求的:

var query = data.OrderBy(o => o[1]).GroupBy(o => o[0]);

答案 1 :(得分:1)

我真的会考虑使用匿名类型(或创建一个单独的类)而不是使用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);