2017-07-08 90 views
1

我想顯示以某個字符結尾的SQL數據庫中的名稱,但它不會讓我在Controller ActionResult中使用WildCard。C#MVC - 在LINQ查詢中使用LIKE

這是我想要工作的當前代碼。

public ActionResult GetClients() 
    { 
     MyDBEntities myDBEntites = new MyDBEntities(); 
     var clients = from c in myDBEntites.Client 
         where c.name LIKE '%r' 
         select c; 
     return View(clients); 

    } 

我在這裏錯過了什麼工作?如果它不使用通配符,那麼如何獲得以特定字符結尾的名稱?

+1

不能在LINQ據我所知做'LIKE'。做'WHERE c.name.EndsWith(「r」)' – apokryfos

+0

@apokryfos謝謝!我想知道爲什麼WildCard沒有工作,我的意思是它像一個完整的SQL代碼,除了通配符。奇怪的。 – Dolev

+0

LINQ與SQL相似但不相同。這只是不同的查詢語言。編譯器會盡可能將LINQ轉換爲SQL,因此在執行查詢時,如果'.EndsWith'實際上在SQL中被轉換爲'LIKE',我不會感到驚訝。 – apokryfos

回答

2

LIKE是一個SQL關鍵字,所以你可以使用EndsWith

c.name.EndsWith("r"); 

最佳做法是,你可能要考慮一個using塊內包裝的DBEntities所以它被正確處置。你也可以將它移入一個新的方法/服務層,而不是在控制器中檢索它,這將是一個更清潔的方法。

服務層

public IEnumerable<Client> RetrieveClients(string endString) 
{ 
    using (MyDBEntities myDbEntities = new MyDBEntities()) 
    { 
     var clients = from c in myDBEntites.Client 
         where c.name EndsWith(endString)' 
         select c; 

     return clients; 
    } 
} 

控制器

public ActionResult GetClients() 
{ 
    var clients = RetrieveClients("R"); 
    return View(clients); 
} 
2

您可以使用EndsWith

public ActionResult GetClients() 
    { 
     MyDBEntities myDBEntites = new MyDBEntities(); 
     var clients = from c in myDBEntites.Client 
         where c.name.EndsWith("r") 
         select c; 
     return View(clients); 

    } 
+0

謝謝!它現在有效 – Dolev

2

我會建議你做的,是嘗試與String.EndsWithLINK TO DOCUMENTATION)方法來解決這個問題。

讓我寫一個基於你的問題爲例,使用LINQ ofcourse:

public ActionResult GetClients() 
{ 
    MyDBEntities myDBEntites = new MyDBEntities(); 
    var clients = from c in myDBEntites.Client 
       where c.name.EndsWith("r") 
      select c; 

return View(clients); 
} 
+0

@Dolev如果你發現這個答案有用,請讓我知道:) –