我在数据库中有一个treatmentDate列,其中提交了治疗患者的日期。如果我需要为特定公司生成2015年1月1日至2015年1月30日期间的总和报告,我该如何构建我的查询。
以下是我所做的事情,我遇到了错误
var treatmentSum = (from s in db.Treatments
where (s.CompanyId == CompanyID)
s.TreatmentDate >= fromDate && s.TreatmentDate <= toDate
select s.Amount).Sum();
ViewBag.TreatmentSum = treatmentSum;
这是我要搜索的治疗日期列。
您的指导将受到高度赞赏。
答案 0 :(得分:1)
你有一些格式问题:
var treatmentSum = (from s in db.Treatments
where s.CompanyId == CompanyID &&
s.TreatmentDate >= fromDate && s.TreatmentDate <= toDate
select s.Amount).Sum();
ViewBag.TreatmentSum = treatmentSum;
你在声明的中间有一个位置:
where (s.CompanyId == CompanyID)
并且您没有将其与&&
修改强>
如上所述,日期是字符串,您可以内联转换它们,但请注意,您可能需要提供一些CultureInfo
,以便格式化程序知道如何转换日期:
var treatmentSum = (from s in db.Treatments
where s.CompanyId == CompanyID &&
Convert.ToDateTime(s.TreatmentDate) >= fromDate && Convert.ToDateTime(s.TreatmentDate) <= toDate
select s.Amount).Sum();
答案 1 :(得分:1)
您没有发布错误消息。您正尝试使用&lt; =和&gt; =来比较字符串,而是尝试将所有Date和Time变量作为DateTime属性处理。 这是LINQ表达式的一段代码:
DateTime FromDate= Convert.ToDateTime("04/20/2015");
DateTime ToDate= Convert.ToDateTime("04/28/2015");
ViewBag.TreatmentSum = GetAllTreatments.
Where(c=>Convert.ToDateTime(c.TreatmentDate)>=FromDate &&
Convert.ToDateTime(c.TreatmentDate)<=ToDate).
Sum(c=>c.Amount);
此处还有针对您的具体问题的演示链接:https://dotnetfiddle.net/1a50HI