2 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
讓 SQL Server 完成所有骯臟的工作。像這樣的東西。
var SQL0 = "SELECT * FROM [database] WHERE material_id IN (select value from string_split('{0}',','))";
var idList = new List<int> { 11, 53, 125};
int[] idListArray = idList.ToArray();
sqlCommand.CommandText = String.Format(SQL0, string.Join(",", idListArray));
// now execute the command
編輯
更安全、更高效的方式。
var SQL0 = "SELECT * FROM [database] WHERE material_id IN (select value from string_split(@ids,','))";
var idList = new List<int> { 11, 53, 125};
int[] idListArray = idList.ToArray();
sqlCommand.CommandText = SQL0;
sqlCommand.Parameters.Add("@ids", SqlDbTypes.VarChar, -1).Value = string.Join(",", idListArray);
// now execute the command

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
您不能以這種方式傳遞參數(shù)數(shù)組。EF6 中的SqlQuery有一個(gè)重載,它接受 SqlParameter 數(shù)組作為第二個(gè)參數(shù)。
你所要做的就是:
SqlParameter[] pms = sqlCommand.Parameters.Cast<SqlParameter>().ToArray();
var datainput = context.materials.SqlQuery(sqlCommand.CommandText, pms);
當(dāng)然,這也意味著您當(dāng)前的許多代碼是不必要的,您可以將其丟棄
例如,您可以在沒有僅用于存儲(chǔ)參數(shù)和命令文本的 SqlCommand 對(duì)象的情況下編寫此代碼。
var SQL0 = "SELECT * FROM [database] WHERE material_id IN ({0})";
var idList = new List<int> { 11, 53, 125 };
var idParameterList = new List<string>();
var pms = new List<SqlParameter>();
int count = 1;
foreach (var id in idList)
{
var paramName = "@idParam" + count++;
SqlParameter p = new SqlParameter(paramName, SqlDbType.Int);
p.Value = id;
pms.Add(p);
idParameterList.Add(paramName);
}
string cmdText = String.Format(SQL0, string.Join(",", idParameterList));
var datainput = context.materials.SqlQuery(cmdText, pms);
- 2 回答
- 0 關(guān)注
- 246 瀏覽
添加回答
舉報(bào)