Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将此查询转换为linq_Sql_Linq - Fatal编程技术网

Sql 如何将此查询转换为linq

Sql 如何将此查询转换为linq,sql,linq,Sql,Linq,您好,请让我知道如何将此查询转换为linq,实际上我需要从sql server创建动态数据透视表。我已完成此查询,但我无法将此查询与视图或函数等保存在我的sql server中。因此,我想从实体模式使用此查询的linq版本 tnx 我找到了一种简单的方法,可以使用存储过程替换linq等来实现此目的: CREATE PROC MeterValuesView AS BEGIN DECLARE @ColumnsTable TABLE ([ColumnName] VARCHAR(50)); IN

您好,请让我知道如何将此查询转换为linq,实际上我需要从sql server创建动态数据透视表。我已完成此查询,但我无法将此查询与视图或函数等保存在我的sql server中。因此,我想从实体模式使用此查询的linq版本

tnx


我找到了一种简单的方法,可以使用存储过程替换linq等来实现此目的:

CREATE PROC MeterValuesView 

AS
BEGIN

DECLARE @ColumnsTable TABLE ([ColumnName] VARCHAR(50));

INSERT INTO @ColumnsTable ([ColumnName])
SELECT DISTINCT '[' + CONVERT(nvarchar(50), Unit) + ']'
FROM   dbo.MeterValueView;

DECLARE @PivotColumns VARCHAR(MAX), @TotalColumn VARCHAR(MAX), @SQL VARCHAR(MAX);

SET @PivotColumns = (SELECT STUFF((SELECT DISTINCT ', ' + CONVERT(nvarchar(50), [ColumnName])
                                   FROM   @ColumnsTable
                                   FOR XML PATH('')), 1, 2, ''));
SET @TotalColumn = (SELECT STUFF((SELECT DISTINCT ' + ISNULL(' + CONVERT(nvarchar(50), [ColumnName]) + ', 0)'
                                  FROM   @ColumnsTable
                                  FOR XML PATH('')), 1, 3, ''));
SET @SQL = 'SELECT *, (' + @TotalColumn + ') AS [Total]
FROM   (SELECT [Serial],
               [Unit],
               [Value]
        FROM   [MeterValueView]) AS t
       PIVOT (MAX([Value])
             FOR [Unit] IN (' + @PivotColumns + ')) AS p;';

EXEC(@SQL)

END

linq中没有与SQL的
PIVOT
等价的东西。为什么不能将其用作存储过程?
CREATE PROC MeterValuesView 

AS
BEGIN

DECLARE @ColumnsTable TABLE ([ColumnName] VARCHAR(50));

INSERT INTO @ColumnsTable ([ColumnName])
SELECT DISTINCT '[' + CONVERT(nvarchar(50), Unit) + ']'
FROM   dbo.MeterValueView;

DECLARE @PivotColumns VARCHAR(MAX), @TotalColumn VARCHAR(MAX), @SQL VARCHAR(MAX);

SET @PivotColumns = (SELECT STUFF((SELECT DISTINCT ', ' + CONVERT(nvarchar(50), [ColumnName])
                                   FROM   @ColumnsTable
                                   FOR XML PATH('')), 1, 2, ''));
SET @TotalColumn = (SELECT STUFF((SELECT DISTINCT ' + ISNULL(' + CONVERT(nvarchar(50), [ColumnName]) + ', 0)'
                                  FROM   @ColumnsTable
                                  FOR XML PATH('')), 1, 3, ''));
SET @SQL = 'SELECT *, (' + @TotalColumn + ') AS [Total]
FROM   (SELECT [Serial],
               [Unit],
               [Value]
        FROM   [MeterValueView]) AS t
       PIVOT (MAX([Value])
             FOR [Unit] IN (' + @PivotColumns + ')) AS p;';

EXEC(@SQL)

END