2012-04-17 68 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