C# 分配一个';日间计数器';对于具有日期时间的对象?
我有一个C# 分配一个';日间计数器';对于具有日期时间的对象?,c#,datetime,group-by,C#,Datetime,Group By,我有一个Order对象列表,其属性OrderDate类型为DateTime,我试图为这些对象分配一个“DayCounter”,表示当天的顺序,例如一天,我有5个订单,因此每个订单都有一个从1到5的计数器 以下是我尝试过的: orders.GroupBy(order => order.OrderDate.DayOfYear + order.OrderDate.Year) .SelectMany(group => { var count = 1; group.Selec
Order
对象列表,其属性OrderDate
类型为DateTime
,我试图为这些对象分配一个“DayCounter”,表示当天的顺序,例如一天,我有5个订单,因此每个订单都有一个从1到5的计数器
以下是我尝试过的:
orders.GroupBy(order => order.OrderDate.DayOfYear + order.OrderDate.Year)
.SelectMany(group =>
{
var count = 1;
group.Select(order =>
{
order.DayCounter = count;
count++;
return order;
});
return group;
});
我从这段代码中得到的Order
对象的DayCounter都是0
任何帮助都将不胜感激尝试使用
的重载。选择将索引作为第二个参数的
orders.GroupBy(order => order.OrderDate.DayOfYear + order.OrderDate.Year)
.SelectMany(group =>
{
group.Select((order,idx) =>
{
order.DayCounter = idx + 1;
return order;
});
return group;
});
尝试使用
的重载。选择将索引作为第二个参数的
orders.GroupBy(order => order.OrderDate.DayOfYear + order.OrderDate.Year)
.SelectMany(group =>
{
group.Select((order,idx) =>
{
order.DayCounter = idx + 1;
return order;
});
return group;
});
LINQ不是用于修改数据,而是用于选择和投影数据。您的Select
永远不会运行,因为Select
是一个惰性方法,而且您从未对其进行迭代。改用普通的foreach
var groups = orders.GroupBy(order => order.OrderDate.Date);
foreach (var grouping in groups)
{
int orderCount = 1;
foreach (var order in grouping)
{
order.DayCounter = orderCount;
orderCount++;
}
}
我也改变了你的分组密钥是一个更可靠的分隔符<代码> OrthDeal.日期< /C> >,你的旧方法将考虑一天减去一天的时间除以同一天。
< P> LINQ不是用于修改数据,而是用于选择和投影数据。您的Select
永远不会运行,因为Select
是一个惰性方法,而且您从未对其进行迭代。改用普通的foreach
var groups = orders.GroupBy(order => order.OrderDate.Date);
foreach (var grouping in groups)
{
int orderCount = 1;
foreach (var order in grouping)
{
order.DayCounter = orderCount;
orderCount++;
}
}
我也改变了你的分组密钥是一个更可靠的分隔符<代码> OrthDeal.日期< /C> >,你的旧方法会考虑一天减去一天的时间除以同一天。
对于你的分组,你最好使用Orth.OrthDeal.日期>代码>您当前的方法考虑1月2日2014和1月1日2015为同一天(两组都使用值<代码> 2016 /代码>为您的组编号),您最好使用<代码>订单.OrthDeal.日期< /C> >,您当前的方法考虑1月2日2014和1月1日2015为同一天。(两人都使用2016
作为组号)不需要%5
,他只说了“1到5”,因为在他的例子中总共有5个订单。要得到他想要的东西,你需要DayCounter=idx+1
(因为idx
是0索引的,他需要1
索引)@ScottChamberlain我只是不确定这是如何解决OP的问题。哦,问题是Select
是懒惰的,他从不枚举它从来不会执行代码。GroupBy也是懒惰的,所以如果你从不枚举它也不会计算。@ScottChamberlain但在某个时候他会枚举。这不应该导致同时枚举这两个对象吗GroupBy and Select?不需要%5
,他只说了“1到5”,因为在他的例子中总共有5个订单。要得到他想要的东西,你需要DayCounter=idx+1
(因为idx
是0索引的,他需要1
索引)@ScottChamberlain我只是不确定这是如何解决OP的问题。哦,问题是Select
是懒惰的,他从不枚举它从来不会执行代码。GroupBy也是懒惰的,所以如果你从不枚举它也不会计算。@ScottChamberlain但在某个时候他会枚举。这不应该导致同时枚举这两个对象吗GroupBy和Select?事实上,强制评估Select
方法成功了,多亏了Lotinded,强制评估Select
方法成功了,多亏了