【发布时间】:2012-02-20 11:48:03
【问题描述】:
我正在尝试创建一个返回日期分组结果的 Linq to SQL 查询。挑战在于每天/每周/每月/每季度分组取决于一个可枚举的参数(周期性)。下面是我当前的 Linq to SQL 查询:
var TotalGroupedInvoices = from c in entidades.InvoicesView
group c by (periodo == periodicity.Daily) ? c.InvoiceDate.Date :
period == periodicity.Weekly? c.InvoiceDate.Date.AddDays(-(double)c.InvoiceDate.DayOfWeek) :
period == periodicity.Monthly? new DateTime(c.InvoiceDate.Year,c.InvoiceDate.Month ,1) :
period == periodicity.Quarterly? new DateTime(c.InvoiceDate.Year, c.InvoiceDate.Month - (c.InvoiceDate.Month % 3) +1, 1) :
period == periodicity.Anual ? new DateTime(c.InvoiceDate.Year, 1, 1) : inicio into Periods
select new
{
period = Periods.Key,
Total = Periodos.Sum(c => c.Total)
};
为了澄清,看一下季度期间的代码片段:
period == periodicity.Quarterly? new DateTime(c.InvoiceDate.Year, c.InvoiceDate.Month - (c.InvoiceDate.Month % 3) +1, 1)
因此,对于第一季度的日期,例如:2012 年 1 月 12 日、2012 年 1 月 15 日或 2012 年 3 月/20 日,我将所有这些日期分组在第一季度开始:2012 年 1 月 1 日,所以它是有效的正如预期的那样。
首先我想知道查询效率。你怎么看待这件事?也许最好将整数转换为 SQL Server 效率并在客户端上重新转换为日期周期,但我不确定这一点。
另一方面,每周组将每周的日期分组到每周的第一个星期日:
period == periodicity.Weekly? c.InvoiceDate.Date.AddDays(-(double)c.InvoiceDate.DayOfWeek)
...但这对我来说是不正确的,因为我来自西班牙,每周从星期一开始。我如何修复周组以考虑到这一点?
所以,总结一下:
- 这个 Linq to SQL 查询效率怎么样?
- 如果考虑从周一到周日的周数,我如何每周按此分组?
非常感谢! PD:对不起我的英语水平。
【问题讨论】:
标签: c# linq-to-sql