EXEC sp_executesql framed from "FromSQLRaw" 未按预期工作

EXEC sp_executesql framed from "FromSQLRaw" not working as expected

我试图通过构造查询,借助“fromSQLRaw”函数,使用我们的 EF 核心应用程序从数据库中获取一些详细信息。

  1. 这是我想要构建以获得所需结果的最终查询,并且此查询运行良好: select * from [User] U where Substring(U.UserName, 1,Charindex(' ', M.UserName)) in ('Test1','Test2')

但是,当我尝试按照数据层中的 sqlrawquery 执行此操作时,代码如下:

var userNameParams = new string[userNames.Count];

var sqlParameters = new List<SqlParameter>();

for (var i = 0; i < userNames.Count; i++)

{

userNameParams[i] = string.Format("@p{0}", i);

sqlParameters.Add(new SqlParameter(userNameParams[i], userNames[i]));

}

var rawCommand = string.Format("select * from [User] U where Substring(U.UserName, 1,Charindex(' ', U.UserName)) in ({0})", string.Join(",", userNameParams));

// Executing the SQL Raw Query

var userDetails = await _dbContext.Users.FromSqlRaw(rawCommand, sqlParameters.ToArray()).ToListAsync();

在 运行 这条语句之后,我在 SQL 分析器中检查了框架查询,查询就像

exec sp_executesql N'select * from [User] U where Substring(U.UserName, 1,Charindex('' '', U.UserName)) in (@p0,@p1) ',N'@p0 nvarchar(10),@p1 nvarchar(10)',@p0=N'''Test1''',@p1=N'''Test2'''

但是当我 运行 这个框架查询时,即使有记录我也没有得到结果,但我从第一个查询(第 1 点)得到结果。

哪里出了问题,我们该如何解决?

我需要从 rawsql 构建的查询中获取结果。

var names = string.Join(',', userNames.Select(n => n.ToString()).ToArray());

var rawCommand = string.Format("select * from [User] U where Substring(U.UserName, 1,Charindex(' ', U.UserName)) in ({names})");

试试上面的方法