Linq,Count()出错

Pat*_*k18 2 c# sql linq

我正在尝试将此SQL查询写入Linq:

SQL:

select c.course_name, count(s.s_name) as studenti from course c 
join study_group g on g.course_id=c.id 
join student s on s.study_group_id=g.id 
group by c.course_name;
Run Code Online (Sandbox Code Playgroud)

LINQ:

var countStudents = (from s in ado.student //on g.id equals s.study_group_id
                     join g in ado.study_group on s.study_group_id equals g.id
                     join c in ado.course on g.course_id equals c.id
                     group s by c.course_name into cn
                     let count = cn.Count(co => co.s_name)
                     select new 
                     {
                        c.course_name
                        course_name = cn.Key
                     });
Run Code Online (Sandbox Code Playgroud)

我仍然有错误 co => co.s_name

错误: Cannot implicitly convert type 'string' to 'bool'

知道任何人如何解决这个问题?

谢谢.

Mar*_*ani 7

SQL COUNT(column)聚合函数仅计算非空值.LINQ中的等价物将是替换该行:

let count = cn.Count(co => co.s_name)  
Run Code Online (Sandbox Code Playgroud)

通过

let count = cn.Count(co => co.s_name != null)  
Run Code Online (Sandbox Code Playgroud)

当然,这里不保证生成的SQL.无论哪种方式,奇怪的是学生的名字可能是空的,尽管我无意讨论你的模型.

注意
除非select在代码中,否则您将无法检索所需的计数.另外,要检查学生的名字是否可以为空,因为如果他们不能,只需要一个cn.Count()就足够了.