Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF.Functions.Like用于使用可能包含Unicode的搜索字符串按多个列进行搜索_C#_Sql Server_Entity Framework - Fatal编程技术网

C# EF.Functions.Like用于使用可能包含Unicode的搜索字符串按多个列进行搜索

C# EF.Functions.Like用于使用可能包含Unicode的搜索字符串按多个列进行搜索,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我正试图借助EF.Functions.Likefunction通过多列进行搜索。以下是我的例子: public static IQueryable<UserProfile> SearchUserHelper(this IQueryable<UserProfile> userProfileQuery, string search) { // Explode string

我正试图借助
EF.Functions.Like
function通过多列进行搜索。以下是我的例子:

        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;
        }
公共静态IQueryable SearchUserHelper(此IQueryable userProfileQuery,
字符串搜索)
{
//将字符串分解为标记
var searchTokens=Regex.Split(搜索“\\s+”).ToList();
var pr=PredicateBuilder.False();
foreach(searchTokens中的var searchToken)
{
pr=pr.Or(e=>EF.Functions.Like(e.FirstName,$“%{search}%”)
||例如(e.MiddleName,$“%{search}%”)
||EF.Functions.Like(e.LastName,$“%{search}%”)
||EF.Functions.Like(e.Login,$“%{searchToken}%”);
}
userProfileQuery=userProfileQuery.Where(pr);
返回userProfileQuery;
}
如您所见,这里有一个类似于helper的东西,用于在我的系统中搜索用户。该方法获取一个搜索字符串,按空格将其分解,并在指令的帮助下生成一个新的Where


所以,我的搜索请求可能会像‘ohn kek’这样。我知道,在这个系统中,我有两个用户:1)FirstName=John,2)Login=kek。我的目标是显示用户作为搜索结果。有了英语,它就完美了。但是其他语言给了我意想不到的结果。对于其他语言,该方法只使用第一个搜索子字符串,而忽略其他子字符串。怎么了?我错过了什么吗?

因为您正在使用searchToken登录和仅使用search的Firstname进行搜索。我希望您在搜索中使用searchToken而不是整体搜索。另一张纸条。您所做的可能是性能瓶颈。我们也有类似的情况,搜索了更多的字段,这是%searchToken%的一个大问题。searchToken%将加快速度。另外,创建包含所有可插入值的计算列将提高性能。在MSSQL上也可以快速搜索Id,然后用这些Id进行第二次搜索。。。非常感谢。现在我明白了,答案是肯定的,我错过了一些东西)一些大的)现在它工作了!你可以从这里开始:@user743414听起来你想做全文搜索。这比像“%foo%”这样的
效率要高得多
。不幸的是,EF不支持FTS(上次我检查)。但是有很多人试图把它作为一个插件来实现。