【问题标题】:Dynamic linq - Group by interval (DateTime, Numeric)动态 linq - 按间隔分组(日期时间、数字)
【发布时间】:2011-09-23 12:51:05
【问题描述】:

我到处搜索,没有找到这个问题的答案。我想在动态 linq 中按间隔(日期时间、数字)进行分组(数据将动态创建,所以我必须使用动态 linq)

假设我们有这样的数据:

ID|Date|Price

1|2010-11-01|100  
2|2010-11-01|120  
3|2010-11-02|50  
4|2010-12-01|30  
5|2010-12-01|220  
6|2011-01-01|400

如何得到这样分组的数据

-(按天分组)关注组

->2010-11-01 = 2 elements  
->2010-11-02 = 1 elements  
->2010-12-01 = 2 elements  
->2011-01-01 = 1 elements  

-(按月分组)关注组

->2010-11 = 3 elements  
->2010-12 = 2 elements  
->2011-01 = 1 elements  

-(按季度分组)以下组

->2010 q.03 = 5 elements  
->2011 q.01 = 1 elements

-(按年份分组)关注组

->2010 = 5 elements  
->2011 = 1 element  

-(Group by Price (From 0, Each 50)) 以下组

-> <0-50) = 1 elements  
-> <50-100) = 1 elements  
-> <100-150) = 2 elements  
-> <200-250) = 1 elements  
-> <400-450) = 1 elements  

-(理想情况下是按价格分组(从 0-50,从 50-150,从 150-500))以下组

-> <0-50) = 1 elements  
-> <50-150) = 3 elements  
-> <150-500) = 2 elements  

有什么想法吗?我再次强调 - 它必须是 DYNAMIC LINQ 还是最终是一些复杂的 lambda 表达式?我应该能够按字符串中的列名“分组”它。例如

GroupBy("Date"), GroupBy("Price");

【问题讨论】:

    标签: linq c#-4.0 lambda expression-trees dynamic-linq


    【解决方案1】:

    这是怎么做的:

    例如:

    按月分组

    public Item[] data = 
        {
            new Item { Date = new DateTime(2011, 11, 6), Price = 103, Name = "a" },
            new Item { Date = new DateTime(2011, 11, 16), Price = 110, Name = "b" },
            new Item { Date = new DateTime(2011, 12, 4), Price = 200, Name = "c" },
            new Item { Date = new DateTime(2011, 12, 4), Price = 230, Name = "d" },
            new Item { Date = new DateTime(2012, 1, 15), Price = 117, Name = "e" }
        };
    
    var groups = data.AsQueryable().GroupBy("Date.Month", "it").Cast<IGrouping<int, Item>>();
    

    您可以使用“Date.Day”和“Date.Year”,对于价格范围之类的内容,您可以使用将范围内的所有内容映射到相同值的函数,例如使用整数除法“(it.Price / 50)”

    【讨论】:

      猜你喜欢
      • 2015-03-01
      • 2016-10-06
      • 2018-01-20
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多