实体框架选择列的总和大于x的位置
问题描述:
我有一个包含多个成本条目的sql表以获得唯一的ID。实体框架选择列的总和大于x的位置
这里是表的简化版本:
Table:
{
public int Id {get;set;}
public DateTime date {get;set;}
public int Cost {get;set;}
}
我需要建立一个EF查询,做到以下几点:
select from the table where x.date.Date = DateTime.Now.date && SUM(x.cost) > 100.00)
and it should group by x.Id
答
你需要做两件事情。对于数据来说,获取起始结束时间和做日期范围比简单得多,而不是仅仅获取日期组件。其次,就再涂第二Where
过滤掉SUM() > 100
:
var dateToCheck = DateTime.Now;
var start = dateToCheck.Date;
var end = dateToCheck.AddDays(1).Date;
var data = tables
.Where(t => t.date >= start && t.date < end)
.GroupBy(t => t.Id)
.Where(g => g.Sum(t => t.Cost) > 100);
+0
感谢您的日期建议,因为我只想比较一年的月份。我不在乎一天或几秒钟 – Zapnologica
答
与您进一步的评论DavidG
的帖子这是你正在寻找,也许什么
var date = DateTime.Now;
var data = from entry in tables
where entry.Date.Month == date.Month && entry.Date.Year == date.Year
group entry.Cost by entry.Id into g
where g.Sum() > 100
select new { Id = g.Key, Sum = g.Sum() };
你是如何分组数据?或者你的意思是“哪里成本> 100”? – DavidG
非常有效的一点,我完全忘了把这个添加到我的问题中。我现在添加了它。 – Zapnologica