我正在尝试将此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'
知道任何人如何解决这个问题?
谢谢.
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()就足够了.