【问题标题】:SQL expressions in EF using LambdaEF 中使用 Lambda 的 SQL 表达式
【发布时间】:2013-06-14 12:02:17
【问题描述】:

我想知道是否类似于this (linq to SQL)

customers.Where(c => SqlMethods.Like(c.Name, "%john%"));

可以在实体框架中进行。最好使用lamba表达式。

我的目标是做这样的事情:

string searchString1 = "%foo";
string searchString2 = "%foo%";
string searchString3 = "foo";

customers.Where(c => SqlMethods.Like(c.Name, searchStringX));

【问题讨论】:

标签: c# asp.net linq entity-framework lambda


【解决方案1】:

Custumers.where(c=>c.name.contains("foo"))

你可以试试这个,它会 100% 工作

【讨论】:

  • 它将如何处理searchString1?它还会做包含还是我得到EndsWith() 行为?
  • ucan 使用端也像customers.where(a=>a.name.endswith(""))
【解决方案2】:

您可以使用字符串 contains、开头和结尾的方法来做同样的事情:

string searchString1 = "foo"

var customerList = from x in customers where x.Name.Contains(searchString1) select x;

 var customerList = from x in customers where x.Name.StartsWith(searchString1) select x;

 var customerList = from x in customers where x.Name.EndsWith(searchString1) select x;

【讨论】:

  • 这不是很动态... :/
【解决方案3】:

我最终得到了以下解决方案:

.Where(c => SqlFunctions.PatIndex("%John", c.Name) > 0);

【讨论】:

    【解决方案4】:

    不知道 lambda 表达式中的任何新内容,但您可以编写这样的 linq 查询:

    var result = from i in customers 
             where i.name.Contains("yourString") 
             select i;
    

    列的数据类型也应该是varchar

    更新:刚刚用 lambda 表达式解决了这个问题

    var result = customers.Where(c => c.name.StartsWith("yourString"));
    var result = customers.Where(c => c.name.EndsWith("yourString"));
    var result = customers.Where(c => c.name.Contains("yourString"));
    

    【讨论】:

    • 它将如何处理searchString1?它还会做包含还是我得到EndsWith() 行为?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2013-08-18
    相关资源
    最近更新 更多