我有一个包含一些 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/