System.Linq.Dynamic – 我可以在WHERE语句中使用IN子句

我有动态linq WHERE声明:

dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ..."); 

我想改变:

 dataContext.Table.Where("id IN (0, 1, 2, ...)"); 

但它不起作用。 我怎样才能获得更好的性能呢?

从如何在动态linq查询中使用“包含”或“喜欢”?

 //edit: this is probably broken, see below ids = new int[] {1,2,3,4}; dataContext.Table.Where("id.Contains(@0)", ids); 

旁白:在动态linq表达式中使用占位符是一种好习惯。 否则你可能会对linq注入攻击开放( 通过动态LINQ可以注入吗? )


编辑:

实际上我觉得我搞砸了。 不幸的是,我现在无法测试这一点。 但我认为在这种情况下正确的语法应该是dataContext.Table.Where("@0.Contains(id)",ids); 而不是相反,并且该版本不能开箱即用。

请参阅此处,了解将此function添加到动态链接的方法。 您需要为此修改库。

 var ids = new int[] {1,2,3,4}; dataContext.Table.Where(f => ids.Contains(f.id)) 

似乎在System.Linq.Dynamic的1.0.4版本中,我们可以使用以下语法dataContext.Table.Where("@0.Contains( outerIt .id)",ids); 因为它是在已经引用的博客中制作和呈现的: 这里