gpt4 book ai didi

c# - LINQ - 按计算字段分组

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:37 25 4
gpt4 key购买 nike

假设我有这样的类(class):

public class MyClass 
{
public DateTime Date { get; set; }
public string Code { get; set; }
}

还有一些值,例如:

| Date          | Code  |
|------------ |------ |
| 03/04/2017 | 1234 |
| 31/03/2017 | 1234 |
| 29/03/2017 | 1234 |
| 29/03/2017 | 4321 |
| 25/03/2017 | 4321 |
| ... | ... |

我想按 Code 字段对这些进行分组,并且还按日期分组,但是我希望按范围对日期进行分组。对此的计算将在一周的开始(该周的星期一)和一周的结束(该周的星期五)找到日期,然后给我一些结果,例如:

| 03/04/2017    | 1234  | < week beginning 03/04 and code=1234

| 31/03/2017 | 1234 | < week beginning 27/03 and code=1234
| 29/03/2017 | 1234 |

| 29/03/2017 | 4321 | < week beginning 27/03 and code=4321

| 25/03/2017 | 4321 | < week beginning 20/03 and code=4321

我试过做一个范围,但我认为我在做的是非常无用的(StartOfWeekhere 的扩展方法):

data.Where(d => d.Date >= d.Date.StartOfWeek(DayOfWeek.Monday) && d.Date <= d.Date.StartOfWeek(DayOfWeek.Monday).AddDays(6));

注意:我正在为我的实际项目使用 Entity Framework ,但是当我这样做时,我正在从 MyClass 表中获取所有数据,我想执行上述所有操作来过滤和适本地分组数据。

最佳答案

下面的代码使用星期日作为一周的第一天。要获得星期几,您需要将一年中的第几天除以 7。如果一年中的第一天是星期一,您需要将一年中的第几天加 1 这样一周中的第几天是 Sun = 0,星期一 = 1 , .... 由于 1 月 1 日是第 1 天(不是第 0 天),因此 divide 方法可以正常工作。

            DataTable dt = new DataTable();
dt.Columns.Add("Date",typeof(DateTime));
dt.Columns.Add("Code",typeof(int));

dt.Rows.Add(new object[] { DateTime.Parse("04/03/2017"), 1234});
dt.Rows.Add(new object[] { DateTime.Parse("03/31/2017"), 1234});
dt.Rows.Add(new object[] { DateTime.Parse("03/29/2017"), 1234});
dt.Rows.Add(new object[] { DateTime.Parse("03/29/2017"), 4321});
dt.Rows.Add(new object[] { DateTime.Parse("03/25/2017"), 4321});

var groups = dt.AsEnumerable().GroupBy(x => (int)(x.Field<DateTime>("Date").DayOfYear + (int)new DateTime(x.Field<DateTime>("Date").Year, 1, 1).DayOfWeek)/7).ToList();

关于c# - LINQ - 按计算字段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43182175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com