我有一个返回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");
}
}
}
}
非常感谢任何帮助。
答案 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);