我有应该按周和工作日对行进行计数的数据。结果我应该得到
一周中的第一天,工作日以及该天的数据计数
我尝试了以下代码:
var GroupedByDate = from r in dsDta.Tables[0].Rows.Cast<DataRow>()
let eventTime = (DateTime)r["EntryTime"]
group r by new
{
WeekStart = DateTime(eventTime.Year, eventTime.Month, eventTime.AddDays(-(int)eventTime.DayOfWeek).Day),
WeekDay = eventTime.DayOfWeek
}
into g
select new
{
g.Key,
g.WeekStart,
g.WeekDay,
LoadCount = g.Count()
};
但是,从DateTime(eventTime.Year,...) 我收到错误消息“不能将C#不可使用的成员datetime用作方法。”
该怎么做?
答案 0 :(得分:6)
立即出现错误是由于您在构造函数调用中缺少new
部分。但是,即使这样,即使您使用现有日期的月份和年份,即使一周的开始是在上一个月份或年份,您仍然会遇到问题。
幸运的是,您可以轻松简化它:
group r by new
{
WeekStart = eventTime.AddDays(-(int)eventTime.DayOfWeek)),
WeekDay = eventTime.DayOfWeek
}
或者如果eventTime
并不总是日期,请使用eventTime.Date.AddDays(...)
。
或者,为清楚起见,您可以提取一个单独的方法:
group r by new
{
WeekStart = GetStartOfWeek(eventTime)
WeekDay = eventTime.DayOfWeek
}
...
private static DateTime GetStartOfWeek(DateTime date)
{
// Whatever implementation you want
}
这样,您可以分别测试GetStartOfWeek
的实现,并且在不影响查询的情况下也可以使其更加复杂。