2010-10-08 29 views
0

我的問題是這樣的:像SQL查詢在LINQ

我正在尋找在LINQ的解決方案,其轉化LINQ表達式到SQL LIKE查詢。 (我知道在LINQ中我可以使用Contains,StarsWidth,EndWidth而不是'LIKE',但在我的情況下不是一個好的解決方案,如果你檢查生成的SQL腳本,你會看到它不是使用LIKE)

我發現很多文章使用的System.Data.Linq.SqlClient.SqlMethods.Like方法 所以我寫了我的查詢:

var query = from c in _context.prgCity where SqlMethods.Like(c.FullName, "%buda") select c.FullName + "|" + c.prgCountry.CountryName; 

return query.ToList<string>(); 

但是,當查詢正在運行出現以下錯誤信息:

「LINQ to Entities does不識別方法'Boolean Like(System.String,System.String)'方法,並且此方法不能轉換爲存儲表達式。「

任何人都可以幫助我,我做錯了什麼?

回答

8

從LINQ到實體時,您正嘗試使用SqlMethods.Like。根據the documentation

此方法目前僅在LINQ to SQL查詢中受支持。

你還沒有真正解釋爲什麼Contains/StartsWith/EndsWith你不工作(在我的經驗,他們會轉換成LIKE條款)。

var query = from c in _context.prgCity 
      where c.FullName.EndsWith("buda") 
      select c.FullName + "|" + c.prgCountry.CountryName; 
+0

我試圖解釋爲什麼Startwidth方法對我不好。 – user295541 2010-10-08 13:33:55

+0

@ user295541:我沒有發現你的解釋令人信服。 'StartsWith'涵蓋「term%」,'EndsWith'涵蓋「%term」,「Contains'涵蓋」%term%「。你需要「喜歡」的唯一時間是如果你在做「te%rm」。實際上,「te%rm」可以通過使用'StartsWith'和'EndsWith'完成。像「t%e%r%m」這樣的東西不能。 – Brian 2010-10-08 14:00:22

4

,你可以寫你的查詢。它會工作。

1
where c.FullName.Contains("buda") 
0

使用包含代替SQLMethods.Like: