如何将此动态sql脚本转换为LinqToSql?

如何将此动态sql脚本转换为LinqToSql?,sql,linq-to-sql,Sql,Linq To Sql,如何将此动态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', '0243

如何将此动态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

您不需要动态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()
  };

一旦内存中有了这些求和,就可以随心所欲地生成结果。

这个sql结果不是我需要的。我必须将结果行转换为列。您不需要数据库来为您执行此操作。您好,David B,您能给我看一些将内存中的结果行转换为列的代码吗?当然,这些代码实际上取决于您要使用的结果对象。在C#中定义的类可能不起作用(无法提前确定所有的stype)。那么是XML、数据集、动态类型还是其他类型呢?SType列存储在另一个表STypeTable中,用户将在STypeTable中添加新的SType,因此SType的值是动态的。你能为这个场景提供一些建议吗?