2010-09-09 61 views
0

如何将此动态SQL脚本转换为LinqToSql?如何将这个动态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 @[email protected]+',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'[email protected]+' From TEST Group By DATES,EMPNO Order By DATES,EMPNO' 
EXEC(@S) 
GO 

回答

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() 
    }; 

一旦你在记忆中有这些数字,那么你可以做任何你想要的结果。

+0

此sql结果不是我所需要的。我必须将结果行转换为列。 – Mike108 2010-09-10 05:53:59

+0

你不需要数据库来为你做。 – 2010-09-10 12:44:23

+0

嗨,大卫B,你能告诉我一些代码将内存中的结果行转换为列吗? – Mike108 2010-09-10 16:22:57