有条件的'或'在nhibernate where子句中

时间:2015-11-10 16:13:38

标签: c# asp.net-mvc nhibernate

我正在处理一个nhibernate查询,我需要在表中选择id匹配我所拥有的数组中任何id的所有记录。

所以我有int[] ids,我需要一个

.Where(x => x.id == ids[0]
 || x.id == ids[1]
 || x.id == ids[2]

等......但是数组中可以包含可变数量的id。这样做的正确方法是什么?

我不确定要搜索什么,否则我会在谷歌上找到一些东西

3 个答案:

答案 0 :(得分:3)

NHibernate可以在SQL中将Contains调用转换为In query

.Where(x => ids.Contains(x.id));

答案 1 :(得分:2)

您可以使用IsIn()

.WhereRestrictionOn(x => x.Id).IsIn(ids);

答案 2 :(得分:2)

您也可以尝试:

.Where(x => Array.IndexOf(i, x.Id)>-1 );

<强>优点:

+ NHibernate不使用sql - 如IsIn()

+比Cointains()

快3倍

这里你找到测试它的代码

    static void Main(string[] args)
    {
        int[] i = new[] { 1, 2, 3, 4, 5, 6, 7 };
        Stopwatch stopwatch = Stopwatch.StartNew(); 


        for (int j= 0; 1000000 > j; j++)
        {
            int pos = Array.IndexOf(i, 5);
            if (pos > -1)
            { }
        }

        stopwatch.Stop();
        Console.WriteLine(stopwatch.ElapsedMilliseconds);


        Stopwatch stopwatch2 = Stopwatch.StartNew();
        for (int j = 0; 1000000 > j; j++)
        {
            bool pos = i.Contains(5);
            if (pos)
            { }
        }
        stopwatch2.Stop();
        Console.WriteLine(stopwatch2.ElapsedMilliseconds);


        Console.Read();
    }

enter image description here