2015-10-16 70 views
-4

我有一个包含多个成本条目的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 
+1

你是如何分组数据?或者你的意思是“哪里成本> 100”? – DavidG

+0

非常有效的一点,我完全忘了把这个添加到我的问题中。我现在添加了它。 – Zapnologica

回答

2

你需要做两件事情。对于数据来说,获取起始结束时间和做日期范围比简单得多,而不是仅仅获取日期组件。其次,就再涂第二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

2

与您进一步的评论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() };