如何发送List 到IN运算符我的sql

问题描述 投票:-1回答:2

我有int列表,我需要转换它,以便可以从c#代码发送到IN运算符。我尝试了很多操作,但每次都有错误。

string idsList = "(" + string.Join(",", ids.Select(id => $"'{id.ToString()}'")) +")";

 var sql = @"SELECT * from user
WHERE user.id IN (@idsList))";
        using (var connection = OpenConnection())
        {
            var results = await connection.QueryAsync<UserQueryResponse>(sql, new
            {
                idsList= idsList,
            });
            return results.Select(raw =>raw.CreateModel());
        }
    }

user.id的列类型是字符串

c# mysql
2个回答
0
投票

我假设你正在使用Dapper。看看这个answer。尝试删除查询中的括号。

var sql = @"SELECT * from user WHERE user.id IN @idsList";
        using (var connection = OpenConnection())
        {
            var results = await connection.QueryAsync<UserQueryResponse>(sql, new
            {
                idsList= idsList,
            });
            return results.Select(raw =>raw.CreateModel());
        }
    }

0
投票

如果您的查询未参数化,则不应使用参数分隔符(qazxsw poi)。

警告:请注意,如果@列表不是ids类型,则可能存在SQL注入问题。

int

更好的方法是使用参数:

List<int> ids = new List<int>{ 7, 14 ,21 };
string idsList = "(" + string.Join(",", ids.Select(id => $"'{id.ToString()}'")) +")";
/* Your idsList variable will contain "('7','14','21')" */
var sql = @"SELECT * from user WHERE user.id IN " + idsList;
© www.soinside.com 2019 - 2024. All rights reserved.