Cześć, daj mi znać, jak mogę to przekonwertowaćzapytanie do linq, tak naprawdę potrzebuję utworzyć dynamiczną tabelę przestawną z serwera sql, który został zrobiony z tym zapytaniem, ale nie mogę zapisać tego zapytania w moim serwerze sql takim samym jak widok lub funkcja lub itp., więc chcę użyć linzu veersion tego zapytania z mój tryb jednostki.
tnx
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)
Odpowiedzi:
0 dla odpowiedzi № 1Dowiesz się w prosty sposób, w jaki sposób mogę użyć procedury sklepu, aby zastąpić linq itp., Aby uzyskać ten cel:
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