Linq 查询:不同的年份 + 动态名称
Linq Query: Distinct Year + Dynamic Name
我正在尝试获取 DateTime 字段并创建 DateObject 列表,其中 DateObject 具有 2 个属性(Year 和 Range ).然后我想确定 DateTime 字段的年份...如果是偶数,我想将该年份保留 Year。如果它是奇数,我想将它更改为年份 - 1 for Year.
然后,基于此,我想为 Range 确定一个字符串,它看起来像“[EvenYear] 到 [EvenYear + 1]”。
我的数据是这样的:
表格数据
- ID(即 1)
- 日期(即 12/7/2017)
如果记录如下:
- ID:1,日期:12/7/2017(2017应该改为2016)
- ID:2,日期:1/1/2016(保留 2016)
- ID:3,日期:1/2/2016(保留 2016)
- ID:4,日期:10/5/2015(2015 将是 2014)
我希望 DateObjects 的输出列表看起来像这样(根据 Year 不同):
- 年份:2014,范围:2014 至 2015
- 年份:2016,范围:2016 至 2017
我对解决这个问题感到非常沮丧。我已经尝试了很多代码。
这是我留下的一直失败的代码:
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();
我正在尝试获取 DateTime 字段并创建 DateObject 列表,其中 DateObject 具有 2 个属性(Year 和 Range ).然后我想确定 DateTime 字段的年份...如果是偶数,我想将该年份保留 Year。如果它是奇数,我想将它更改为年份 - 1 for Year.
然后,基于此,我想为 Range 确定一个字符串,它看起来像“[EvenYear] 到 [EvenYear + 1]”。
我的数据是这样的:
表格数据
- ID(即 1)
- 日期(即 12/7/2017)
如果记录如下:
- ID:1,日期:12/7/2017(2017应该改为2016)
- ID:2,日期:1/1/2016(保留 2016)
- ID:3,日期:1/2/2016(保留 2016)
- ID:4,日期:10/5/2015(2015 将是 2014)
我希望 DateObjects 的输出列表看起来像这样(根据 Year 不同):
- 年份:2014,范围:2014 至 2015
- 年份:2016,范围:2016 至 2017
我对解决这个问题感到非常沮丧。我已经尝试了很多代码。
这是我留下的一直失败的代码:
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();