Like in Lambda Expression and LINQ

后端 未结 6 1566
伪装坚强ぢ
伪装坚强ぢ 2020-12-08 09:45

How can I do something like this:

customers.where(c=>c.Name **like** \"john\");

I know this isn\'t possible but I was wondering how can

相关标签:
6条回答
  • 2020-12-08 10:14
    customers.Where(c => c.Name.Contains("john"));
    
    0 讨论(0)
  • 2020-12-08 10:15

    The first thought that comes to mind is Regex.IsMatch.

    This would come closest to providing the kind of functionality you get from LIKE; for instance with it you could do this:

    var matches = people.Where(p => Regex.IsMatch(p.Name, "A.*[mn]"));
    
    foreach (Person match in matches)
    {
        Console.WriteLine(match.Name);
    }
    

    And get output like this:

    Adam
    Aaron
    Aidan
    

    Going with string.Contains as others have suggested is almost certainly preferable if your intention is simply to look for a specific substring within Name.

    0 讨论(0)
  • 2020-12-08 10:17
    using System.Data.Linq.SqlClient;
    ...
    customers.where(c=>SqlMethods.Like(c.Name, "john"));
    
    0 讨论(0)
  • 2020-12-08 10:32

    Here is my code :

    string s="somethings";
    
    customers.Where(c => c.Name != null && c.Name.ToLower().Contains(s.ToLower()));
    

    Somethings like that.

    0 讨论(0)
  • 2020-12-08 10:36

    If you are targeting LINQ to SQL, use SqlMethods.Like:

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

    Explanation:

    The compiler will generate an expression tree from the statement above. Since LIKE is a SQL specific construct and not common to all LINQ Query providers, the SqlMethods class and its members are used as a "hint" for the expression compiler (compiles expression trees to SQL) to emit a LIKE statement.

    0 讨论(0)
  • 2020-12-08 10:36

    Use Regex.IsMatch in your where statement or for a more simpler version without wildcards etc.:

    customers.where(c=>c.Name.Contains("john"));
    
    0 讨论(0)
提交回复
热议问题