我正在尝试编写将转换为以下查询的代码:
SELECT * FROM players WHERE Id IN (xxx)
对于MS-SQL和linq2sql,我使用了"包含"结构,效果很好。
现在(对于MySQl和BLToolkit)我是这样做的:
public static IList<Player> GetPlayersByIds(IList<int> ids, DbManager db)
{
return db.GetTable<Player>().Where(pl => ids.Contains(pl.Id)).ToList();
}
但是执行此代码会返回以下错误:
value(vfm_elita.elita_table.player.Player+<>c__DisplayClass13).ids.包含(pl.Id)' 无法转换为 SQL。
有什么解决方案吗?
如果不是,如何通过 ID 列表查询对象列表?
非常感谢,欢迎任何反馈。
您也可以在 BLToolkit 中使用 Contains,检查文件。\UnitTests\Linq\Functions.cs在 BLToolkit 源代码中,用于某些单元测试,使用
包含我认为(未经测试)您当前代码的问题在于使用 IList只需尝试使用列表即可
public static IList<Player> GetPlayersByIds(List<int> ids, DbManager db)
{
return db.GetTable<Player>().Where(pl => ids.Contains(pl.Id)).ToList();
}
看起来我有一个错误的 BLToolkit 的旧版本。获得 4.1(已完全重写 linq2sql 转换器)后,问题得到解决。