【问题标题】:C# MVC - Using LIKE in LINQ query [duplicate]C# MVC - 在 LINQ 查询中使用 LIKE [重复]
【发布时间】:2017-07-08 10:04:37
【问题描述】:

我想显示以特定字符结尾的 SQL 数据库中的名称,但它不允许我在 Controller ActionResult 中使用 WildCard。

这是我当前想要工作的代码。

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

    }

我在这里缺少什么让它工作?如果它不适用于通配符,那么我如何获得以特定字符结尾的名称?

【问题讨论】:

  • 不能在 LINQ AFAIK 中执行 LIKE。做WHERE c.name.EndsWith("r")
  • @apokryfos 谢谢!我想知道为什么通配符不起作用,我的意思是它就像一个完整的 SQL 代码,除了通配符。很奇怪。
  • LINQ 与 SQL 相似但不同。这只是不同的查询语言。编译器会在执行查询时尽可能地将 LINQ 转换为 SQL,因此如果 .EndsWith 在 SQL 中实际转换为 LIKE,我不会感到惊讶。
  • @apokryfos 啊,好的,我现在明白了。非常感谢你

标签: c# .net sql-server asp.net-mvc linq


【解决方案1】:

LIKE 是 SQL 关键字,因此您可以使用 EndsWith

c.name.EndsWith("r");

作为最佳实践,您可能需要考虑将 DBEntities 包装在 using 块中,以便正确处理它。您还可以将其移动到新的方法/服务层,而不是在 Controller 中检索它,这将是一种更简洁的方法。

服务层

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);
    
        }
    

    【讨论】:

      【解决方案3】:

      我建议你在这里做的是尝试使用String.EndsWith (LINK TO DOCUMENTATION) 方法解决这个问题。

      让我根据你的问题写一个例子,当然使用 linq:

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

      【讨论】:

      • @Dolev 如果您发现此答案有用,请告诉我 :)
      猜你喜欢
      • 2019-12-17
      • 1970-01-01
      • 2021-05-13
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 2013-11-22
      相关资源
      最近更新 更多