使用Oracle为十进制值生成IN语句

时间:2012-10-15 02:08:15

标签: c# oracle entity-framework linq-to-entities

我无法让LINQ生成IN语句。我有一个看起来像下面那个的函数,将一个long列表作为输入,表示要查找的主键。使用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子句中的其他条件。

0 个答案:

没有答案