C# 使用Dapper将列表插入临时表

C# 使用Dapper将列表插入临时表,c#,mysql,sql,.net,dapper,C#,Mysql,Sql,.net,Dapper,我正在尝试使用Dapper将整数列表插入到临时表中。我根据所选的堆栈溢出答案编写了查询。但是,运行查询时出现语法错误 代码: List<int> lst = new List<int> {1, 2, 3, 4}; string queryString="CREATE TABLE #Temp (ListInt int)" + " INSERT INTO #Temp (ListInt) VALUES (@Lst);"; dbConnectio

我正在尝试使用Dapper将整数列表插入到临时表中。我根据所选的堆栈溢出答案编写了查询。但是,运行查询时出现语法错误

代码:

List<int> lst = new List<int> {1, 2, 3, 4};
string queryString="CREATE TABLE #Temp (ListInt int)" 
                + " INSERT INTO #Temp (ListInt) VALUES (@Lst);";
dbConnection.Open();

dbConnection.Query(queryString, new {Lst = lst});
System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near ','.

如何使用Dapper插入此列表?

您可以通过Dapper的功能完成此操作

SQL查询必须只包含要重复的命令,并且参数(传递给Dapper)必须是对象的
IEnumerable
,其中每个对象都有一个以您使用的参数命名的属性。最后,在插入(而不是检索)值时,使用
Execute
(而不是
Query
):

List lst=新列表{1,2,3,4};
dbConnection.Open();
dbConnection.Execute(“创建表#Temp(ListInt)”);
dbConnection.Execute(“插入到#Temp(ListInt)值(@item);”,
选择(x=>new{item=x});

请注意,如果要插入数千项,则每个项将执行一次
INSERT
语句,这可能非常慢。如果是这种情况,请调查Dapper的社区扩展,例如可以在一个
insert
语句中插入1000项。

代码中的“lst”是什么?提供一个最小且完整的示例。示例1是一个列表
List<int> lst = new List<int> {1, 2, 3, 4};
dbConnection.Open();
dbConnection.Execute("CREATE TABLE #Temp (ListInt int)");
dbConnection.Execute("INSERT INTO #Temp (ListInt) VALUES (@item);",
    lst.Select(x => new { item = x }));