如何将此动态sql脚本转换为LinqToSql?
如何将此动态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
-- 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的值是动态的。你能为这个场景提供一些建议吗?