繁体   English   中英

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

[英]How should I pass an array to the FIELD statement using Dapper, c#

我正在尝试使用 Dapper 将数组作为参数传递。 我的值数组必须进入 FIELD 部分。

我试图将数组元素加入一个字符串并传递它。 还是不行。

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();
            }

此查询只是执行 Order By Id。 我还传入了 param = Ids。 还是不行。

根据这个问题SELECT * FROM X WHERE id IN (...) with Dapper ORM你应该能够用 dapper 做一个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;
}

将列表转换为 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();
        

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM