У меня есть следующая хранимая процедура.Я реализовал UNION, чтобы избежать написания 2 хранимых процедур.Моя главная проблема заключается в том, что EF не распознает динамически созданный столбец, даже если я добавлю его вручную в класс object_result, который запрашивает модель.Кто-нибудь знает, как заставить работать такие динамически генерируемые столбцы?
(странно, что RANK() VolumeRank
ниже работает, но RefYear
не отображается).
SQL:
BEGIN
SET NOCOUNT ON;
SET FMTONLY OFF;
SELECT *
FROM
(SELECT
B.OS, B.DS, COUNT(DISTINCT A.PO) Volume,
RANK() OVER (ORDER BY COUNT(DISTINCT A.PO) DESC) VolumeRank,
YEAR(GETDATE()) RefYear
FROM
DB.DW.LoadData AS A
JOIN
DB.DW.Geo AS B ON A.PO = B.PO
INNER JOIN
DW.DMaster AS C ON A.LoadDateKey = C.DateKey
WHERE
C.IsT12Weeks_LastWeek = 1
AND a.PrimaryCustomerID = @CustomerId
GROUP BY
B.OS, B.DS) AS A
WHERE
VolumeRank <= 3
UNION
SELECT *
FROM
(SELECT
B.OS, B.DS,
COUNT(DISTINCT A.PO) Volume,
RANK() OVER (ORDER BY COUNT(DISTINCT A.PO) DESC) VolumeRank,
YEAR(getdate())-1 RefYear
FROM
DB.DW.LoadData AS A
JOIN
DB.DW.Geo AS B ON A.PO = B.PO
INNER JOIN
DW.DMaster AS C ON A.LoadDateKey = C.DateKey
WHERE
PrimaryCustomerID = @CustomerId
AND FWeek >= @FirstWeek
AND FWeek <= @LastWeek
AND FiscalYear = @FiscalYear
GROUP BY
B.OS, B.DS) AS A
WHERE
VolumeRank <= 3
ORDER BY
RefYear DESC, Volume DESC
END
C #:
List<spGetT_Result> result = new List<spGetT_Result>();
using (var db = new T_Entities())
{
result = db.spGetT(eid, firstWeek, lastWeek, year).ToList();
}
Класс модели содержит эту строку, но при запуске всегда имеет значение:
public Nullable<int> RefYear { get; set; }