2013-05-05 55 views
1

我試着寫我的SQL commang到LINQ:如何AVG()在LINQ

SQL:

select avg(sub.evaluation) from submit_task sub where student_id='" + idStudent + "' and state='close'; 

的Linq:

double avg = (ado.submit_task.Where(r => (r.id == idStudent && r.state == "close")).Average(r => r.evaluation)); 

avgStudent = avg.ToString(); 

但這不工作,當我刪除&& r.state == "close"聲明時,我得到了結果,但它不正確。

謝謝。

+5

什麼意思是完全由「不工作」?你說你在某些情況下得到了結果,但是不正確,你得到了什麼結果,你期望什麼? – 2013-05-05 12:07:09

+0

另外請注意,在您的SQL版本中,您應該使用參數化查詢...無法使用 – 2013-05-05 12:09:20

+0

「我的意思是,在db中找不到記錄,但是當我刪除這個語句時,我得到了結果,fe:from values:5 ,10,15我得到avg = 4 – Patrik18 2013-05-05 12:13:44

回答

3

我試圖用一組樣本數據的相同,它工作正常

List<student> students = new List<student> 
     { 
      new student{id="1",state="close",evaluation=5}, 
      new student{id="1",state="close",evaluation=4} 
     }; 
     double avg = (students.Where(r => (r.id == "1" && r.state == "close")).Average(r => r.evaluation)); 

public class student 
{ 
    public string id { get; set; } 
    public string state { get; set; } 
    public int evaluation { get; set; } 
} 

可能是你應該檢查數據在數據庫或修改查詢的state="close"部分

+0

我不知道,仍然沒有 – Patrik18 2013-05-05 13:30:41

+0

@ user1726810:請檢查'ado.submit_task'中的對象數的計數,並且如果可能的話發佈數據庫表數據[sample]以及模型以檢查state屬性的數據類型。 – Saravanan 2013-05-05 15:33:44

0

OK,這裏的代碼,其中的工作:

var avgEvalClose = (from sub in ado.submit_task 
        where sub.student_id.Equals(idStudent) 
        where sub.state.Equals("close") 
        select sub.evaluation).Average(); 
avgStudent = avgEvalClose.ToString();