【发布时间】:2016-12-10 19:56:07
【问题描述】:
var resultsFromSql = from wb in reportContext.WorkItems
where wi.DateRequired >= model.FirstDate && wi.DateRequired <= model.SecondDate
select new
{
wi.Reference,
dateRequired = SqlFunctions.DatePart("yyyy", wi.DateRequired) + "/" + SqlFunctions.DatePart("mm", wi.DateRequired) + "/" + SqlFunctions.DatePart("dd", wi.DateRequired),
earliestActionDate = SqlFunctions.DatePart("yyyy", wi.EarliestActionDate) + "/" + SqlFunctions.DatePart("mm", wi.EarliestActionDate) + "/" + SqlFunctions.DatePart("dd", wi.EarliestActionDate),
mainRef = wi.MainReferenceId != 0 ? wi.MainReferenceId.ToString() : " ",
subRef = wi.SecondaryReference ?? "",
details = wi.DisplayDetails ?? "",
createdOn = SqlFunctions.DatePart("yyyy", wi.CreatedOn) + "/" + SqlFunctions.DatePart("mm", wi.CreatedOn) + "/" + SqlFunctions.DatePart("dd", wi.CreatedOn),*/ /*wi.UpdatedBy,
updatedOn = SqlFunctions.DatePart("yyyy", wi.UpdatedOn) + "/" + SqlFunctions.DatePart("mm", wi.UpdatedOn) + "/" + SqlFunctions.DatePart("dd", wi.UpdatedOn),
timeTaken = SqlFunctions.DateDiff("day", wi.UpdatedOn, wi.CreatedOn) + " days "
/*+ SqlFunctions.DatePart("h", wi.UpdatedOn - wi.CreatedOn) + ":"
+ SqlFunctions.DatePart("n", wi.UpdatedOn - wi.CreatedOn) + ":"
+ SqlFunctions.DatePart("s", wi.UpdatedOn - wi.CreatedOn)*/,
timeStuff = SqlFunctions.DatePart("h", wi.UpdatedOn /*- wi.CreatedOn*/)
};
由于 DatePart 不支持小时数等,TimeTaken 和 TimeStuff 无法工作,并且我收到与 timeTaken 的注释部分的 dateTime 数学有关的其他错误。如何创建 x 天、小时、分钟和秒的 timeTaken 值,它是从 updatedOn 减去 createdOn 计算的时间长度,它是 dateTimes。
/*List<T> list = new List<T>();*/
foreach (var res in resultsFromSql.ToList())
{
res.timeTaken = res.CreatedOn; /*= SqlFunctions.DateDiff("day", res.UpdatedOn, res.CreatedOn)#1#
}
如果我之后运行 foreach,我将无法为任何属性分配值,因为匿名类型是只读的。如何获得剩余小时数(最多 24 天)、分钟数(最多 60 天)和秒数(最多 60 天)的天数(全天值,而不是一个月的剩余部分,即 197 天)。
【问题讨论】:
-
使用“dd”或“d”作为日期的第一个参数。见msdn.microsoft.com/en-us/library/ms174420.aspx。
-
@Kevin 谢谢你,但是小时、分钟和秒等以及如何在 Linq 查询或 foreach 中完成这一切
-
我可能会使用 foreach 和 TimeSpans,但这可能对您有用,也可能不适用。取决于您的 WorkItem 对象中的类型。