2013-05-05 46 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();