Я поворачиваю данные в хранимой процедуре MS SQL. Сводные столбцы создаются динамически с использованием параметра хранимой процедуры (например: «location1, location2, location3»), поэтому количество столбцов, которые будут сгенерированы, неизвестно. Вывод должен выглядеть так (где местоположения берутся из параметра хранимой процедуры):
время заказа | Местоположение1 | Местоположение2 | Местоположение3
Есть ли шанс, что это можно использовать в LINQ to SQL? Когда я перетащил эту процедуру в файл dbml, она показывает, что эта процедура возвращает тип int.
Столбцы, которые я использую из таблицы log_sales
:
- Местоположение (различное местоположение, которое я поворачиваю),
- Плата (сумма денег)
- Время заказа
Хранимая процедура:
CREATE PROCEDURE [dbo].[proc_StatsDay] @columns NVARCHAR(64) AS
DECLARE @SQL_PVT1 NVARCHAR(512), @SQL_PVT2 NVARCHAR(512), @SQL_FULL NVARCHAR(4000);
SET @SQL_PVT1 = 'SELECT OrderTime, ' + LEFT(@columns,LEN(@columns)-1) +'
FROM (SELECT ES.Location, CONVERT(varchar(10), ES.OrderTime, 120),ES.Charge
FROM dbo.log_sales ES
) AS D (Location,OrderTime,Charge)
PIVOT (SUM (D.Charge) FOR D.Location IN
(';
SET @SQL_PVT2 = ') )AS PVT
ORDER BY OrderTime DESC';
SET @SQL_FULL = @SQL_PVT1 + LEFT(@columns,LEN(@columns)-1) +
@SQL_PVT2;
EXEC sp_executesql @SQL_FULL, N'@columns NVARCHAR(64)',@columns = @columns
В файле dbml designer.cs
часть кода моей хранимой процедуры:
[Function(Name="dbo.proc_StatsDay")]
public int proc_EasyDay([Parameter(DbType="NVarChar(64)")] string columns)
{
IExecuteResult result = this.ExecuteMethodCall(this,((MethodInfo)MethodInfo.GetCurrentMethod())), columns);
return ((int)(result.ReturnValue));
}