我正在处理一个nhibernate查询,我需要在表中选择id匹配我所拥有的数组中任何id的所有记录。
所以我有int[] ids
,我需要一个
.Where(x => x.id == ids[0]
|| x.id == ids[1]
|| x.id == ids[2]
等......但是数组中可以包含可变数量的id。这样做的正确方法是什么?
我不确定要搜索什么,否则我会在谷歌上找到一些东西
答案 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()
这里你找到测试它的代码
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();
}