我正在尝试使用Dapper将数组作为参数传递。 我的值数组必须进入“字段”部分。
我试图将数组元素连接成String并传递它。仍然不起作用。
Guid[] myArr = Ids.ToArray(); // Ids are List<Guid>
var script = @"SELECT * FROM table WHERE Id in @Ids ORDER BY FIELD(Id, @param)";
using (var connection = database.Connection)
{
return connection.Query<MyDataType>(script, new {Ids = Ids, param = myArr}).ToList();
}
此查询只是按ID排序。我还传入了param = Ids。仍然不起作用。
答案 0 :(得分:0)
根据这个问题SELECT * FROM X WHERE id IN (...) with Dapper ORM,您应该可以使用精巧的工具WHERE in
,但是要注意数组中项数的限制。
然后,您还可以分解ORDER BY FIELD
SQL并使用linq对结果进行OrderBy
。
编辑: 这行得通吗?
Guid[] myArr = Ids.ToArray(); // Ids are List<Guid>
var script = @"SELECT * FROM table WHERE Id in @Ids)";
using (var connection = database.Connection)
{
var myDataTypeObjects = connection.Query<MyDataType>(script, new {Ids = Ids}).ToList();
myDataTypeObjects = myDataTypeObjects.OrderBy(x => Ids.IndexOf(x.Id)).ToList();
return myDataTypeObjects;
}
答案 1 :(得分:0)
将列表转换为dapper参数列表中的数组。
var sqlQuery = "Select * from table Where Columnname IN @periodIdStr";
var result = dapperUOW.Connection.Query<Entity>(sqlQuery ,
param: new { periodIdStr = periodIds.ToArray() }, transaction: dapperUOW.Transaction).ToList();