У меня есть хранимая процедура, в которой аргументы выглядят так:
Create Procedure [dbo].[myStoredProcedure]
@TaskId int = 0
, @FileName varchar(200) =''
, @DataDtFrom smalldatetime = '01/01/1900'
, @DataDtTo smalldatetime = '01/01/1900'
, @OFFSET INT = 0
, @FETCH INT = 2000
, @WhereClauseString varchar(5000) = ''
SELECT
DataDt
,EffDt
,LoanNumber
,UploadDate
,UploadedFileName
FROM dbo.myFileTable u
WHERE
(@DataDtTo = '01/01/1900' or DataDt between @DataDtFrom and @DataDtTo)
and (@TaskId = 0 or TaskId = @TaskId)
and (@FileName = '' or UploadedFileName like '%' + @FileName + '%')
**Where ??? = @WhereClauseString**
ORDER BY u.UploadDate
OFFSET @OFFSET ROWS
FETCH NEXT @FETCH ROWS ONLY
Я инициализирую это в C #
var whereClauseString = "LoanNum in(111,222,444) and TaskId in (123,456,789)";
using (var conn = new MyEntities().Database.Connection)
{
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandTimeout = 1800;
cmd.CommandText = model.UploadStoredProcedure;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@TaskId", Convert.ToInt64(model.TaskId)));
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@FileName", model.FileName ?? string.Empty));
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@DataDtFrom", DateTime.Parse(model.adjFromDataDt.ToShortDateString()) <= DateTime.Parse(basicDate.ToShortDateString()) ? basicDate : model.adjFromDataDt.Date));
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@DataDtTo", DateTime.Parse(model.adjToDataDt.ToShortDateString()) <= DateTime.Parse(basicDate.ToShortDateString()) ? basicDate : model.adjToDataDt.Date));
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@OFFSET", model.Page));
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@FETCH", model.PageSize));
**Dynamic Where clause** -->> System.Data.SqlClient.SqlParameter("@WhereClause", whereClauseString));
var da = new System.Data.SqlClient.SqlDataAdapter((System.Data.SqlClient.SqlCommand)cmd);
da.Fill(ds);
}
Мой вопрос: возможно ли построить динамическое предложение where, передать его в хранимую процедуру и отсортировать по столбцам, на которые есть ссылки в предложении where?
Как узнать, какие столбцы мне нужны в хранимой процедуре, на которые ссылаются в предложении where?
Будет ли такое возможно с помощью этой хранимой процедуры и Entity Framework?