如何为对象集合创建嵌套的LINQ分组/查找

时间:2010-05-20 15:50:04

标签: .net linq grouping lookup

给定一个带有日期和小数的对象列表,我想按日期的年,月,日和小时索引这些对象。在.NET 2.0中,我会使用一组嵌套字典和一个列表作为叶节点创建此图。我对LINQ如何做到这一点很感兴趣。

2 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

var grouping = from item in myList
               group item by new { item.Date.Year, item.Date.Month, item.Date.DayOfWeek, item.Date.Hour }
               into groupedItems
               select groupedItems;

答案 1 :(得分:1)

假设你有一个带有DateTime和Decimal属性的类......

public class SomeThingWithDateAndDecimal
{
    public DateTime SomeDate { get; set; }
    public decimal SomeDecimal { get;set; }
}

如果我是你,我会为你的钥匙创建一个课程......

public class IndexKey
{
    public int Year { get; set; }
    public int Month { get; set; }
    public DayOfWeek DayOfWeek { get; set; }
    public int Hour { get; set; }

    public IndexKey(DateTime dt)
    {
        Year = dt.Year;
        Month = dt.Month;
        DayOfWeek = dt.DayOfWeek;
        Hour = dt.Hour;
    }

然后从你的列表中做这样的事情......

public static void Main()
{
    var l = new List<SomeThingWithDate>();

    //Fill the list with stuff...

    var indexed = l.ToLookup(o => new IndexKey(o.SomeDate));
}

这不是嵌套的,但你可以用嵌套字典做任何事情,你可以用这个结构做。使用嵌套字典很难做到的一些事情变得更简单,例如部分键查找,即“使用Hour == 2获取所有值”。