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);
因为它是在已经引用的博客中制作和呈现的: 这里