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
方法成功了,多亏了