首页 > 解决方案 > EF.Functions.Like 用于使用可能包含 Unicode 的搜索字符串按多列搜索

问题描述

我试图在EF.Functions.Like函数的帮助下按多列搜索。这是我的例子:

        public static IQueryable<UserProfile> SearchUserHelper(this IQueryable<UserProfile> userProfileQuery,
            string search)
        {
            
            // Explode string to tokens 
            var searchTokens = Regex.Split(search, "\\s+").ToList();

            var pr  = PredicateBuilder.False<UserProfile>();
            
            foreach (var searchToken in searchTokens)
            {
                pr = pr.Or(e => EF.Functions.Like(e.FirstName, $"%{search}%")
                                || EF.Functions.Like(e.MiddleName, $"%{search}%")
                                || EF.Functions.Like(e.LastName, $"%{search}%")                            
                                || EF.Functions.Like(e.Login, $"%{searchToken}%"));
            }

            userProfileQuery = userProfileQuery.Where(pr);

            return userProfileQuery;
        }

如您所见,这里有一些类似于在我的系统中搜索用户的帮助程序。该方法获取一个搜索字符串,用空格将其分解,并在谓词生成器的帮助下创建一个新的 Where 指令。

因此,我的搜索请求可能类似于:例如“ohn kek”。而且我知道,在系统中我有两个用户:1)FirstName = John,2)Login = kek。我的目标是向用户展示搜索结果。用英语它工作得很好。但是其他语言给了我意想不到的结果。对于其他语言,该方法只采用第一个搜索子字符串并忽略其他。怎么了?我错过了什么吗?

标签: c#sql-serverentity-framework

解决方案


推荐阅读