1

我正在尝试编写将转换为以下查询的代码:

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.Contains(pl.Id)' 无法转换为 SQL。

有什么解决办法吗?

如果不是,如何通过 ID 列表查询对象列表?

非常感谢,欢迎任何反馈。

4

2 回答 2

0

看起来我的 BLToolkit 旧版本有一个错误。得到 4.1(完全重写 linq2sql 转换器)后问题得到解决。

于 2012-04-12T03:52:38.637 回答
0

您也可以在 BLToolkit 中使用 Contains,检查 BLToolkit 源中的文件 ..\UnitTests\Linq\Functions.cs 以获取一些使用 contains 的单元测试

我认为(未经测试)您当前代码的问题是使用 IList 只需使用 List 尝试

public static IList<Player> GetPlayersByIds(List<int> ids, DbManager db)
{
    return db.GetTable<Player>().Where(pl => ids.Contains(pl.Id)).ToList();
}
于 2012-04-11T14:51:11.037 回答