我有一个包含一些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
您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在&#39; _binary&#39; System.Collections.Generic.List`1 [System.Int64]&#39;附近使用正确的语法。 &#39;在第1行
请不要给我一个LINQ解决方案。提前谢谢。
答案 0 :(得分:0)
我认为你不能将数组传递给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
的查询