15

我有动态 linq WHERE 语句:

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

我想更改为:

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

但它不起作用。我怎样才能做到这一点以获得更好的性能?

4

3 回答 3

13

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

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

旁白:在动态 linq 表达式中使用占位符是一种很好的做法。否则,您可能会面临 linq 注入攻击(Is Injection possible through Dynamic LINQ?


编辑:

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

有关将此功能添加到动态链接的方法,请参见此处。您需要为此修改库。

于 2012-04-17T18:10:59.137 回答
6
var ids = new int[] {1,2,3,4};
dataContext.Table.Where(f => ids.Contains(f.id))
于 2012-04-17T07:34:17.117 回答
4

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

于 2015-04-21T13:12:20.683 回答