2

我无法让 LINQ 生成 IN 语句。我有一个看起来像下面的函数,将一个长列表作为输入,表示要查找的主键。使用 contains 方法最终会生成复合 OR 语句的查询。我们正在针对 Oracle 数据库运行。我们正在使用最新版本的 LINQ/EF。QueryableDbSet 是一个 DbSet。PrimaryKey 属性是一个十进制值,是 Oracle 中对象的主要整数标识符。

List<long> GetList(List<long> ids)
{
    List<decimal> dIds = ids.Select(x => (decimal)x);
    var query = from c in QueryableDbSet
                where dIds.Contains(c.PrimaryKey)
                select (long)c;
    return query.ToList();
}

上面的代码将生成复合 OR 语句。有谁知道如何让 LINQ 生成更快的 IN 语句?谢谢。

编辑:做更多的研究,Oracle 似乎实际上将 IN 语句转换为 OR 链,所以这可能是徒劳的练习。任何人都可以确认或否认这一点吗?

另外,我知道上述功能完全没有意义/多余。我的实际用例更复杂,并且在 where 子句中涉及其他条件。

4

0 回答 0