Возможно ли выполнить этот SQL запрос к списку в ASP. NET MVC?
Предыдущие SQL запросы не были расширены, поэтому я мог приписать каждый столбец с результат для поля в модели.
Контроллер:
public ActionResult Firmy(Firmy_Query model)
{
string parametra = model.parametr1.ToString();
string parametrb = model.parametr2.ToString();
ViewBag.Data_start = parametra;
ViewBag.Data_finish = parametrb;
List<Models.FirmyPub> list = new List<Models.FirmyPub>();
try
{
using (SqlConnection con = new SqlConnection())
{
String sql = @"DECLARE @SelectCols nvarchar(MAX), @Cols nvarchar(MAX), @Query nvarchar(MAX), "
+ "@MinDate date = '" +parametra + "', "
+ "@MaxDate date = '" + parametrb + "' "
+ "SET @SelectCols = STUFF((SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) "
+ "',ISNULL(' + QUOTENAME (CAST(DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)AS varchar(20)))+',0) AS '+QUOTENAME (CAST(DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)AS varchar(20))) "
+ "FROM sys.all_objects a CROSS JOIN sys.all_objects b "
+ "FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'') "
+ "SET @Cols = STUFF((SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) "
+ "',' + QUOTENAME(CAST(DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)AS varchar(20))) "
+ "FROM sys.all_objects a CROSS JOIN sys.all_objects b "
+ "FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'') "
+ "SET @Query ='DECLARE @MinDate1 DATE = ''' + CAST(@MinDate AS varchar(20)) +''' "
+ "DECLARE @MaxDate1 DATE = ''' +CAST(@MaxDate AS varchar(20)) + ''' "
+ "SELECT FIRMA,' + @SelectCols + ' FROM "
+ "( "
+ "SELECT Shortcut as FIRMA, cast(mg.data as date) as DATA, CAST(ABS(SUM(mg.wartoscWz)) as decimal(20, 2)) as WART "
+ "FROM HM.MG "
+ "INNER JOIN SSCommon.STContractors STC ON MG.khid = STC.id "
+ "WHERE MG.subtyp = 89 "
+ "AND MG.aktywny = 1 "
+ "AND MG.anulowany = 0 "
+ "AND MG.bufor = 0 "
+ "AND MG.kod like ''%PZ'' "
+ "AND MG.typ_dk <> ''SrT'' "
+ "AND MG.createdDate >= @MinDate1 and MG.createdDate < DATEADD(day, 1, @MaxDate1) "
+ "Group by (Shortcut), mg.data "
+ ") DANE "
+ "PIVOT "
+ "( "
+ "max(WART) FOR [DATA] IN ( ' +@cols+ ') "
+ ") p "
+ "ORDER BY FIRMA";
con.ConnectionString = @"";
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand(sql, con);
da.Fill(dt);
foreach (DataRow row in dt.Rows)
{
string firmaSTR = "FIRMA";
var pub = new FirmyPub();
pub.firma = row[firmaSTR].ToString();
list.Add(pub);
}
return View(list);
}
}
catch
{
return View("Error");
}
}
Этот результат запроса SQL представляет собой один столбец FIRMA
и столбцы с днями, которые пользователь получает в другом представлении. Мой вопрос, возможно ли выполнить этот SQL запрос? Если это возможно, как приписать динамические c столбцы для модели, которая публикует результаты?