linq case insensitive (without toUpper or toLower)

前端 未结 8 2607
执念已碎
执念已碎 2020-12-15 02:27
public Articles GetByName(string name, Categories category, Companies company)
{
    var query = from article in session.Linq()
                where         


        
相关标签:
8条回答
  • 2020-12-15 02:47

    Change it to

    public Articles GetByName(string name, Categories category, Companies company)
            {
        var query = from article in session.Linq<Articles>()
                                where string.Equals(article.Name, StringComparison.CurrentCultureIgnoreCase)  == name &&
                                    string.Equals(article.Category, StringComparison.CurrentCultureIgnoreCase == category &&
                                    string.Equals(article.Company, StringComparison.CurrentCultureIgnoreCase == company
                                select article;
    
                    return query.FirstOrDefault();
    }
    
    0 讨论(0)
  • 2020-12-15 02:48

    If you are using C# 6.0 you can define a short extension method to be used when constructing LINQ statements:

    public static bool EqualsInsensitive(this string str, string value) => string.Equals(str, value, StringComparison.CurrentCultureIgnoreCase);
    

    Usage:

    query.Where(item => item.StringProperty.EqualsInsensitive(someStringValue));
    

    For C# less than 6.0 it will look like this:

    public static bool EqualsInsensitive(this string str, string value) 
    {
        return string.Equals(str, value, StringComparison.CurrentCultureIgnoreCase);
    }
    
    0 讨论(0)
  • 2020-12-15 02:50

    If this is a LINQ to SQL query against a database with a case-insensitive collation, then it already is case-insensitive. Remember that LINQ to SQL isn't actually executing your == call; it's looking at it as an expression and converting it to an equality operator in SQL.

    If it's LINQ to Objects, then you can use String.Equals as the other posters have pointed out.

    0 讨论(0)
  • 2020-12-15 02:53

    Instead of == use the .Equals(name, StringComparison.OrdinalIgnoreCase) method.

    var query = from article in session.Linq<Articles>()
                where article.Name.Equals(name, StringComparison.OrdinalIgnoreCase) &&
                      article.Category.Equals(category) &&
                      article.Company.Equals(company)
                select article;
    
    return query.FirstOrDefault();
    
    0 讨论(0)
  • 2020-12-15 03:01
    var query = from article in session.Linq<Articles>()
               where string.Equals(article.Name,name, StringComparison.OrdinalIgnoreCase) &&
                     string.Equals(article.Category,category, StringComparison.OrdinalIgnoreCase) &&
                     string.Equals(article.Company,company, StringComparison.OrdinalIgnoreCase)
                            select article;
    
                return query.FirstOrDefault();
    

    It will also handle when Name,Category,Company is null

    0 讨论(0)
  • 2020-12-15 03:01

    Use

    String.Equals(article.Name, name, StringComparison.OrdinalIgnoreCase)
    
    0 讨论(0)
提交回复
热议问题