如何将此动态sql脚本转换为LinqToSql?
-- Create sample table
Create Table TEST
(DATES Varchar(6),
EMPNO Varchar(5),
STYPE Varchar(1),
AMOUNT Int)
-- Insert sample data
Insert TEST Select '200605', '02436', 'A', 5
Union All Select '200605', '02436', 'B', 3
Union All Select '200605', '02436', 'C', 3
Union All Select '200605', '02436', 'D', 2
Union All Select '200605', '02436', 'E', 9
Union All Select '200605', '02436', 'F', 7
Union All Select '200605', '02436', 'G', 6
Union All Select '200605', '02438', 'A', 7
Union All Select '200605', '02438', 'B', 8
Union All Select '200605', '02438', 'C', 0
Union All Select '200605', '02438', 'D', 3
Union All Select '200605', '02438', 'E', 4
Union All Select '200605', '02438', 'F', 5
Union All Select '200605', '02438', 'G', 1
GO
-- the sql script which I want to convert into LinqToSql
Declare @S Varchar(1000)
Set @S=''
Select @S=@S+',SUM(Case STYPE When '''+STYPE+''' Then AMOUNT Else 0 End) As '+STYPE
From (Select Distinct STYPE From TEST) A Order By STYPE
Set @S='Select DATES,EMPNO'+@S+' From TEST Group By DATES,EMPNO Order By DATES,EMPNO'
EXEC(@S)
GO
答案 0 :(得分:0)
您不需要动态SQL来计算这些总和。此查询计算您需要的每个数字。
SELECT Dates, EmpNo, SType, SUM(Amount)
FROM Temp
GROUP BY Dates, EmpNo, SType
ORDER BY Dates, EmpNo, SType
并且很容易翻译成LinqToSql。
var query =
from rec in db.Temps
group rec by new {rec.Dates, rec.EmpNo, rec.SType} into g
order by g.Key.Dates, g.Key.EmpNo, g.Key.SType
select new
{
Dates = g.Key.Dates,
EmpNo = g.Key.EmpNo,
SType = g.Key.SType,
TheSum = g.Sum()
};
一旦你在记忆中获得了这些金额,那么你可以做任何你喜欢的结果。