Linq 查询:不同的年份 + 动态名称

Linq Query: Distinct Year + Dynamic Name

我正在尝试获取 DateTime 字段并创建 DateObject 列表,其中 DateObject 具有 2 个属性(YearRange ).然后我想确定 DateTime 字段的年份...如果是偶数,我想将该年份保留 Year。如果它是奇数,我想将它更改为年份 - 1 for Year.

然后,基于此,我想为 Range 确定一个字符串,它看起来像“[EvenYear] 到 [EvenYear + 1]”。

我的数据是这样的:

表格数据

如果记录如下:

我希望 DateObjects 的输出列表看起来像这样(根据 Year 不同):

我对解决这个问题感到非常沮丧。我已经尝试了很多代码。

这是我留下的一直失败的代码:

var sessionYears = db.tblDates.GroupBy(x => (x.Date.Year % 2 == 0 ? x.Date.Year : x.Date.Year - 1)).ToList();

return sessionYears.Select(x => new List<DateObject>                {
StartYear= x.Key,
Range = x.Select(y => y.Date.Year + " to " + (y.Date.Year + 1))
}

我试过弄乱 distinct 和 groupby,但我显然遗漏了一些步骤等。我在网上找不到任何东西。任何帮助将不胜感激!!!提前致谢。

您可以先创建 DateRangeObject 的列表,然后再获取不同的值。这将使您的查询更加简单。

return db.tblDates
    .Select(x => new DateRangeObject {
        StartYear = x.Date.Year % 2 == 0 ? x.Date.Year : x.Date.Year - 1,
        EndYear = (x.Date.Year % 2 == 0 ? x.Date.Year : x.Date.Year - 1) + " - " + ((x.Date.Year % 2 == 0 ? x.Date.Year : x.Date.Year - 1) + 1);
    })
    .GroupBy(x => x.StartYear)
    .Select(x => x.First())
    .ToList();