首页 > 解决方案 > 如何在 LINQ 中分组和选择(创建增量)?

问题描述

我有这个代码:

foreach (var item in orderedItems.Select((x, i) => new { x, i }) 
{
  item.x.Index = item.i + 1;
  //some stuff here
}

它允许我设置项目的索引。现在我需要按一些参数(item.Date)对项目进行分组,并只为组内的项目创建索引。像这样:{group1:1,2,3}{group2:1,2}

当我尝试这样的事情时:

foreach (var taskGr in orderedItems.GroupBy(x=>x.TaskDate).Select((x, i) => new { x, i }));
{
  foreach (var task in taskGr)
  {
    //task.Index =...           
  }
}

我有

“类型 '{x:System.Linq.IGrouping,Models.Task>, i:int}' 不可枚举”

在 taskGr 上

有没有办法通过 LINQ 查询来做到这一点?

标签: c#linq

解决方案


你可以做类似的事情

var orderedItems = Enumerable.Range(1,15)
                   .Select(x=> new Order{Date = DateTime.Now.AddDays(x%3)});
    var indexItems = orderedItems.GroupBy(x=>x.Date)
                   .SelectMany(x=>x.ToList()
                            .Select((c,index)=>new Order{Date= x.Key, Index=index+1}));

订单定义为

public class Order
{
    public int Index{get;set;}
    public DateTime Date{get;set;}
}

这将给出一个输出为

Index Date
1 18-01-2019 15:59:47 
2 18-01-2019 15:59:47 
3 18-01-2019 15:59:47 
4 18-01-2019 15:59:47 
1 19-01-2019 15:59:47 
2 19-01-2019 15:59:47 
3 19-01-2019 15:59:47 
1 17-01-2019 15:59:47 
2 17-01-2019 15:59:47 
3 17-01-2019 15:59:47 

推荐阅读