2011-01-05 44 views
8

任何人都可以告訴我如何使用微軟動態表達API來管理LIKE操作員?動態庫(System.Linq.Dynamic)如何支持LIKE運算符?

我需要在我的動態添加多個類似的表達在那裏查詢

/* 
var query = 
db.Customers. 
Where("CityName Like @0 or CityName Like @1", "London", "USA") 
*/ 
var query = 
db.Customers. 
Where("CityName Like @0 or CityName Like @1%", "London", "USA") 

感謝滿口

回答

16

嘗試使用簡單的「CityName.Contains(@ 1)」,這將轉換爲正確的lambda,因爲它對可訪問類型的方法調用。

類似:

var query = 
db.Customers. 
Where("CityName.Contains(@0) or CityName.Contains(@1)", "London", "USA") 

只需用自帶的動態庫示例應用程序測試,它產生LIKE操作

+0

謝謝你,我拯救了我的生命:) – Soren 2012-11-20 11:51:19

3

只需添加更多的where子句

var query = db.Customers.Where(c=>c.CityName.contains("London")); 
query = query.Where(c=>c.CityName.contains("USA")); 
query = query.Where(c=>c.CityName.contains("Johannesburg")); 

,但上面的查詢會創建它:

SELECT * FROM其中CITYNAME 像 「倫敦」 CITYNAME像 「USA」 等...

你想客戶

SELECT * FROM客戶那裏CITYNAME 像「倫敦「城市名稱如 」USA「等...

使用動態創建或語句,你可以使用predicatebuilder沒什麼很多的功能那裏,你可以使用 ...

http://www.albahari.com/nutshell/predicatebuilder.aspx

var predicate = PredicateBuilder.False<Customer>(); 
predicate = predicate.Or(c=>c.CityName.Contains("London")); 
predicate = predicate.Or(c=>c.CityName.Contains("USA")); 
predicate = predicate.Or(c=>c.CityName.Contains("Johannesburg")); 
+0

我需要使用動態表達式,所以我應該將字符串作爲字符串 – Kiarash 2011-01-05 01:16:25

+0

對不起並不完全知道你需要什麼,但檢查我的編輯 – Gaven 2011-01-05 01:27:00

+0

感謝加文和抱歉的誤解,我只需要動態地添加字段到where子句就像字符串 外觀: 其中(「CityName Like @ 0或CityName Like @ 1」,「London」,「USA」) 具有字符串中的字段,可以動態生成,但在您的示例中不是這種情況。 但感謝您的公司 – Kiarash 2011-01-05 05:00:05

2

您可以使用.StartsWith(),.EndsWith().Contains()將產生LIKE SQL分別與尾隨,領先和周圍的通配符。不知道用嵌入通配符生成語句的方法。

0

你可以試試這個。

IList<string> keyword = new List<string>() { "London", "USA", "Johannesburg" }; 
      var query = db.Customers.Where(c => keyword.Contains(c.CityName)); 
+0

我喜歡你的把戲,但它不是正確的答案因爲我需要從字符串動態選擇我的字段名稱所以謝謝隊友。 – Kiarash 2011-01-06 00:16:37

2

@Jaime 這就是我所需要的,謝謝。

var query = db.Customers。 凡( 「CityName.Contains(@ 0)或CityName.Contains(@ 1)」, 「倫敦」, 「USA」)

+1

或者如果你想要一個開始或結束比賽,如下所示: var query = db.Customers。何處(「CityName.EndsWith(@ 0)或CityName.StartsWith(@ 1)」,「London」,「USA」) – 2011-11-15 22:52:30

2

這將需要使用的「Like」的整數字段的照顧......

。凡(searchField +「的ToString()。包含(@ 0)」,搜索字符串);