2015-10-16 35 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() };