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

C# System.Linq.Dynamic-我可以在WHERE语句中使用IN子句吗,c#,.net,linq,dynamic,C#,.net,Linq,Dynamic,我有动态linq WHERE语句: dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ..."); 我想换成: dataContext.Table.Where("id IN (0, 1, 2, ...)"); 但它不起作用。我如何做到这一点以获得更好的性能 来自 var ids = new int[] {1,2,3,4}; dataContext.Table.Where(f => ids.Contains(f.id)) 旁白

我有动态linq WHERE语句:

dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ...");
我想换成:

dataContext.Table.Where("id IN (0, 1, 2, ...)");
但它不起作用。我如何做到这一点以获得更好的性能

来自

var ids = new int[] {1,2,3,4};
dataContext.Table.Where(f => ids.Contains(f.id))
旁白:在动态linq表达式中使用占位符是一种很好的做法。否则,您可能会受到linq注入攻击()


编辑:

事实上我想我把事情搞砸了。 不幸的是,我目前无法测试这一点。 但是我认为在这种情况下正确的语法应该是
dataContext.Table.Where(“@0.Contains(id)”,ids),而不是相反的方式,并且该版本不可开箱即用


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

似乎在System.Linq.Dynamic的1.0.4版中,我们可以使用以下语法
dataContext.Table.Where(“@0.Contains(outerIt.id)”,ids)正如在已经引用的博客中制作和展示的:

谢谢,我知道这一点,但列名“id”正在改变。我是平日里得到这个专栏的。所以我不能使用静态Linq。我必须使用动态linq库作为字符串where子句的示例@Ingenu,阅读资源,您将了解动态Linq是关于什么的。似乎对于字符串值,ID必须是列表,而不是数组,否则您将得到错误“No'it'is in scope”
//edit: this is probably broken, see below
ids = new int[] {1,2,3,4};
dataContext.Table.Where("id.Contains(@0)", ids);