在SQL Server 2008中,我们可以定义表类型并将其用作存储过程的参数.但是如何在这个SP的C#调用中使用它呢?换句话说,如何使用SQL Server 2008的这一新功能创建表或列表并将其传递到C#代码中的存储过程?
如何在Entity Framework中编写参数化的原始sql查询?我尝试过以下方法:
string dateQueryString = String.Join(",", chartModelData.GetFormattedDateList());
//Dates returned in format of 20140402,20140506,20140704
const string selectQuery =
@"SELECT
MAX(DATA_SEQ) AS MaxSeq, MIN(DATA_SEQ) AS MinSeq, COUNT(1) AS TotSampleCnt
FROM SPCDATA_TB
WHERE DATA_WDATE IN @DateParam
AND LINE_CODE = @LineCode
AND MODEL_NO = @ModelNumber
AND LOT_NO = @LotNumber
AND EQUIP_NO LIKE @EquipNumber";
SPCDataSeqCntInfo dataSeqCntInfo = _dbContext.Database.SqlQuery<SPCDataSeqCntInfo>(
selectQuery,
new SqlParameter("@DateParam", dateQueryString),
new SqlParameter("@LineCode", chartModelData.LineCode),
new SqlParameter("@ModelNumber", chartModelData.ModelNum),
new SqlParameter("@EquipNumber", equipmentNumber),
new SqlParameter("@LotNumber", chartModelData.LotNum)
).SingleOrDefault() ?? new SPCDataSeqCntInfo();
Run Code Online (Sandbox Code Playgroud)
但正如预期的那样,它会在DateParam上抛出一个错误,因为它期望一个值.