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

Pav*_*cka 12 .net c# linq dynamic

我有动态linq WHERE语句:

dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ...");
Run Code Online (Sandbox Code Playgroud)

我想改变:

dataContext.Table.Where("id IN (0, 1, 2, ...)");
Run Code Online (Sandbox Code Playgroud)

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

Hug*_*une 10

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

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

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


编辑:

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

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


Can*_*ide 5

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

  • 谢谢,我知道这一点,但列名“id”正在改变。我非常喜欢这个专栏。所以我不能使用静态 Linq。我必须使用动态 linq 库作为字符串 where clausule 作为示例。[动态Linq](http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx) (2认同)