2017-07-08 88 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如果你发现这个答案有用,请让我知道:) –