我在我的 C# 项目中使用 LINQ to SQL 构建查询,但我遇到了一些问题......
我想要做的是选择像今天一样的最后 4 天(例如,星期五),所以如果我们在 28 日星期五,我想查询:星期五 21、14、7... 最后四个星期五,但不是今天。
这很简单,我已经做到了,但这是复杂的部分,我不想查询我设置的异常,例如月末,每个月的第 28 天到第 1 天,所以假设我想查询这个(十月,星期五):
今天是26号星期五,我想查询:
19、12、5 和 9 月 28 日(从现在起的第四个星期五),但正如我所说,28 日是月底,所以我需要返回 9 月 21 日,这是最后一个星期五,而且不是月底……我假期也有同样的问题,但我想如果我能处理好月底,我可以处理它们......
我希望我已经解释了好让你理解我想要什么......这是我的查询,它正在工作但无法处理异常。(字段 b.day 是每天的 Id,8 表示月末,7 表示假期)
var values =
from b in dc.MyTable
where // This means end of month
b.day != 8
// This triggers to query last 4 days
&& b.date == Convert.ToDateTime(last.ToString("dd/MM/yyy")).AddDays(-28)
|| b.date == Convert.ToDateTime(last.ToString("dd/MM/yyy")).AddDays(-21)
|| b.date == Convert.ToDateTime(last.ToString("dd/MM/yyy")).AddDays(-14)
|| b.date == Convert.ToDateTime(last.ToString("dd/MM/yyy")).AddDays(-7)
orderby b.id descending
group b.valor by b.hora_id into hg
orderby hg.Key descending
select new
{
Key = hg.Key,
Max avg = System.Convert.ToInt32(hg.Average() + ((hg.Average() * intOkMas) / 100)),
Min avg = System.Convert.ToInt32(hg.Average() - ((hg.Average() * intOkMenos) / 100))
};