我应该如何使用Dapper,C#将数组传递给FIELD语句

时间:2019-05-09 19:59:09

标签: c# mysql field dapper

我正在尝试使用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。仍然不起作用。

2 个答案:

答案 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();