【发布时间】:2014-08-26 00:41:16
【问题描述】:
如何在实体框架中编写参数化的 where-in 原始 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();
但正如预期的那样,它会在 DateParam 上引发错误,因为它需要一个值。
【问题讨论】:
-
@DateParam应该是一个逗号分隔的字符串,表示您希望在集合中查找的日期,然后它也应该用括号分隔。
标签: c# sql .net asp.net-mvc entity-framework