Linq, Expressions, NHibernate and Like comparison

后端 未结 4 1784
[愿得一人]
[愿得一人] 2021-02-09 18:52

I am trying to do a like comparison based on an outside parameter (passed by a search form) that determines type of comparison (\"%string\" or \"string%\"

4条回答
  •  执笔经年
    2021-02-09 19:10

    Sounds like you should be wanting to use:

    query = query.Where(
    Entity.StringProperty.Contains("SearchString")
    )
    

    This should map to:

    WHERE StringProperty LIKE '%SearchString%'
    

    This should also work for more advanced search masks such as "Mr? Sm%th", but I haven't had to test any search strings like that myself yet.


    UPDATE: Based on OPs edit

    It sounds like what you are asking for is something like the following:

       public enum SelectedComparsionType
        {
            StartsWith,
            EndsWith,
            Contains
        }
    
    public static bool Like(this string searchString, string searchPattern, SelectedComparsionType searchType)
    {
        switch (searchType)
        {
            case SelectedComparsionType.StartsWith:
                return searchString.StartsWith(searchPattern);
            case SelectedComparsionType.EndsWith:
                return searchString.EndsWith(searchPattern);
            case SelectedComparsionType.Contains:
            default:
                return searchString.Contains(searchPattern);
        }
    }
    

    This would allow you to write code as you require, i.e:

    query = query.Where(
    Entity.StringProperty.Like("SearchString", SelectedComparsionType.StartsWith)
    )
    

    However, personally, I would replace any use of SelectedComparsionType, with a direct call to the required string function. I.e

    query = query.Where(
    Entity.StringProperty.StartsWith("SearchString")
    )
    

    As this will still map to a SQL 'LIKE' query.

提交回复
热议问题