c# - 如何使用 Entity Framework 6 通过 IN 语句执行原始 sql

标签 c# mysql sql entity-framework-6

我有一个包含一些 ID 的列表,我想选择 ID 位于该列表中的记录。到目前为止我已经

var ids = new List<long> {1, 2, 3};  // Actually the list is not hard coded
using(var context = new MyContext())
{
   context.MyModel.Database.SqlQuery("SELECT * FROM dbo.MyModel WHERE Id IN @p0", ids).ToList();
}

但这不起作用,它给了我一个 MySql.Data.MySqlClient.MySqlException

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '_binary 'System.Collections.Generic.List`1[System.Int64]' ' at line 1

请不要给我 LINQ 解决方案。提前致谢。

最佳答案

我认为你不能将数组传递给sql, 这适用于 SqlServer 您可能需要更改为 MySql 的新 MySQLParameter

var inParams = ids.Select((id, i) => new SqlParameter("p"+i, id));

var query = "select * from Employees where Id in (" + string.Join(",", inParams.Select(p => "@" + p.ParameterName)) + ")";

var data = db.Database.SqlQuery<Employee>(query, inParams.Cast<object>().ToArray()).ToList();

您还可以使用 LINQ 进行更复杂的查询以及具有 AS、JOIN 和 UNION 的查询

关于c# - 如何使用 Entity Framework 6 通过 IN 语句执行原始 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167055/

相关文章:

SQL连接问题

sql - 该子查询出错

c# - 将 AutoFixture 与具有许多构造函数的类一起使用

Java Socket 客户端无法连接到 C# Socket 服务器

c# - 为什么 dapper 查询会失败而 ado 调用不会失败?

php - 使用 whois 检查子域名

php - 显示来自 MySQL 的多个值

php - 我想扩展一个 SQL 查询来获取它正在选择的 ID 的名称。我怎么做?

c# - 构造函数外的 DI

php - 从 TXT 文件导入数据到 MySQL