C# “如何修复”;靠近';的语法不正确'&引用;。当查询中没有)时

C# “如何修复”;靠近';的语法不正确'&引用;。当查询中没有)时,c#,sql,dapper,C#,Sql,Dapper,我试图使用Dapper对我的数据库运行一个查询,但是,引发了一个异常。异常的消息是 “')附近的语法不正确 让我困惑的是,我在整个查询中没有正确的参数。它过去有一些,但我一直在简化它,直到我做到这一点: select i.id as EmployeeReviewId from @ReviewIds i 这仍然会导致错误 @ReviewIds是一个表值参数,它只有一列,一个名为id的int列 我这样调用函数: await connection.QueryAsync<FooInfo>(

我试图使用Dapper对我的数据库运行一个查询,但是,引发了一个异常。异常的消息是

“')附近的语法不正确

让我困惑的是,我在整个查询中没有正确的参数。它过去有一些,但我一直在简化它,直到我做到这一点:

select i.id as EmployeeReviewId
from @ReviewIds i
这仍然会导致错误

@ReviewIds
是一个表值参数,它只有一列,一个名为id的int列

我这样调用函数:

await connection.QueryAsync<FooInfo>(sql, new { reviewIds });
await connection.querySync(sql,new{reviewIds});
其中,
FooInfo
是具有
EmployeeReviewId
属性的对象,
reviewIds
int
的可枚举项

我不得不假设这与我如何使用Dapper有关


有人知道如何解决此问题吗?

您可能错误地传递了用户定义的表参数。您必须将其作为DataTable传递,而不是作为简单数组传递。一个最简单的工作示例是

public class FooInfo
{
    public int EmployeeReviewId { get; set; }
}

class Program
{
    static async Task Main(string[] args)
    {
        using (var connection =
            new SqlConnection("Persist Security Info=False;Integrated Security=true;Initial Catalog=YOUR_DB_NAME;Server=."))
        {
            var result = await connection.QueryAsync<FooInfo>("select i.id as EmployeeReviewId from @ReviewIds i", new
            {
                ReviewIds = CreateTableType(new[] {1, 2, 3})
            });
            Console.WriteLine(result);
        }
    }

    private static DataTable CreateTableType(IEnumerable<int> nums)
    {
        var t = new DataTable();
        t.SetTypeName("dbo.ArrayOfInt");
        t.Columns.Add("id");
        foreach (var num in nums)
        {
            t.Rows.Add(num);
        }
        return t;
    }
}
CREATE TYPE dbo.ArrayOfInt AS TABLE  
(  
id int NOT NULL
)