c# - 如何在 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 查询来做到这一点?
解决方案
你可以做类似的事情
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
推荐阅读
- heroku - 是否可以仅将应用程序日志(而不是路由器日志)发送到 Heroku 日志记录插件?
- internet-explorer - 如何在 IE 中制作背景大小的封面
- python - Pandas 中带有“通配符”的查找表
- javascript - Javascript“removeEventListener”不起作用
- excel - 在 VBA 中设置查找下一个和查找上一个按钮
- python-3.x - 如何在 pyttsx3 中暂停和恢复?
- linux - Linux如何将时间格式转换为纪元时间?
- mysql - SQL 选择和连接
- django - Django 无法解压不可迭代的“Q”对象
- php - Laravel - 权限和角色包?