【发布时间】:2014-06-11 19:16:04
【问题描述】:
下面的 SQL 返回按周更新的记录计数。
我在 linq 中重新创建了按周返回计数的部分(如下),但我无法获得 startofweek 和 endofweek 列。帮助
SQL
select
DATEPART(wk, audit_date) week,
count(audit_date) updatedRec,
dateadd (week, DATEPART(wk, audit_date), dateadd (year, DATEPART(year, audit_date)-1900, 0)) - 4 - datepart(dw, dateadd (week, DATEPART(wk, audit_date), dateadd (year, DATEPART(year, audit_date)-1900, 0)) - 4) + 1 startofweek,
dateadd (week, DATEPART(wk, audit_date), dateadd (year, DATEPART(year, audit_date)-1900, 0)) - 4 - datepart(dw, dateadd (week, DATEPART(wk, audit_date), dateadd (year, DATEPART(year, audit_date)-1900, 0)) - 4) + 7 endofweek
from itims.Listings_Audit
where audit_type = 'U' and datepart(year,audit_date) = '2014'
Group by DATEPART(wk, audit_date), DATEPART(year, audit_date)
order by startofweek, week
Linq
var data = (from p in _db.Listings_Audit
where p.audit_type == "U"
where p.audit_date.Value.Year == 2014
group p by new
{
Column1 = (int?) SqlFunctions.DatePart("wk", p.audit_date),
Column2 = (int?) SqlFunctions.DatePart("year", p.audit_date)
}
into g
select new
{
week = g.Key.Column1,
updatedRecCnt = g.Count(p => p.audit_date != null),
}).OrderBy(g=>g.week).ToList();
【问题讨论】:
-
附带说明,这些查询将尽可能慢。您的 where 和 group by 语句不是 Sargable。
-
当您使用
LINQ查询DB时,您必须告诉我们您正在使用的具体技术,例如LINQ2SQL或LINQ2Entities。 -
@HamletHakobyan 由于 OP 使用的是
SqlFunctions这需要 Linq2Entities -
@arserbin3,真的吗?我看到很多开发人员尝试将
SqlFunctions与LINQ2SQL或类似的东西一起使用。
标签: c# sql linq linq-to-entities