请问在Linq to sql 中,怎么使用 sql 语句中的 max(case when ... then ... else ... end) 语法?

以下是原Sql语句:

dglist = GetExamInfo();  //获取试题信息

for (int i = 0; i < dglist.Count; i++)
{
     //其中 PExamName 、PState 是 PerScore 表中的字段 
     sqlstr += " max(case when PExamName='" + dglist[i].HExamName + "' then     PState else null end)'" + dglist[i].HExamName + "',";
}
if (sqlstr.Length > 0)
sqlstr = sqlstr.Substring(0, sqlstr.Length - 1);

sqlstr = " select PTName '队名', SUM(POkScore+PAdjustScore) '总分',"
+ sqlstr + " from PerScore where PHallID='"
+ Guid.Parse(Session["hid"].ToString())
+ "' group by PTID,PTName order by '总分' desc ";

以下是上面sql语句执行时的语句:(假设dglist有三条记录,分别是“合并利润表”、“利润表试题”、“资金日报表”)

select PTName '队名', SUM(POkScore+PAdjustScore) '总分',

max(case when PExamName='合并利润表' then PState  else null end)'合并利润表', max(case when PExamName='利润表试题' then PState  else null end)'利润表试题', max(case when PExamName='资金日报表' then PState  else null end)'资金日报表', 
from PerScore where PHallID='eecb075c-3862-4519-b966-7e9e4f287890' group by PTID,PTName order by '总分' desc

现在我希望把上面这个sql语句转换成linq to sql ,谢谢!

注:红色PerScore表示数据表,咖啡色注明的表示是这张表的字段。

米脂
浏览 596回答 2
2回答

阿晨1998

在LINQ TO SQL里使用行转列倒是没用过,不过,你可以在数据库服务器定义一个视图,然后再建立模型对象。 此外,也可以通过DATACONTEXT来执行一段SQL语句,获取执行后的数据,只是此时不再是MODEL,需要你自己再处理。

慕码人8056858

参考:LINQ体验(5)——LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server