2012-04-17 80 views

回答

10

How to use “contains” or “like” in a dynamic linq query?

//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);,而不是其他方式,并且该版本确实是而不是可直接使用。

请参阅here以便将此功能添加到动态链接。你需要修改这个库。

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

谢谢,我知道这一点,但列名“id”正在改变。我得到这个专栏dinamycally。所以我不能使用静态Linq。我必须使用动态linq库作为例子的clausule字符串。 [Dynamic Linq](http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx) – 2012-04-17 09:46:43

+1

@Ingenu ,阅读资源,你会发现什么动态Linq是关于 – 2012-04-17 17:15:38

2

似乎在System.Linq.Dynamic的1.0.4版,我们可以使用下面的语法dataContext.Table.Where("@0.Contains(outerIt.id)",ids);,因为它是由在已经引用的博客介绍: here