sql - StartsWith() 在 LINQ 中不会转换为 Like ('abc%' )

标签 sql linq asp.net-core entity-framework-core

我有以下 asp.net 核心 LINQ 代码:

    List<UserSearchResult> results = await db.ApplicationUsers.Where(u => u.Name.StartsWith(name) && !u.Deleted && u.AppearInSearch)
                                    .OrderByDescending(u => u.Verified)
                                    .ThenBy(u => u.DateAdded) // Added to prevent duplication of results in different pages
                                    .Skip(page * recordsInPage)
                                    .Take(recordsInPage)
                                    .Select(u => new UserSearchResult()
                                    {
                                        Name = u.Name,
                                        Verified = u.Verified,
                                        PhotoURL = u.PhotoURL,
                                        UserID = u.Id,
                                        Subdomain = u.Subdomain
                                    }).ToListAsync();

不幸的是,这转化为以下内容:
SELECT [t].[Name], [t].[Verified], [t].[PhotoURL], [t].[Id], [t].[Subdomain]  FROM (      SELECT [u0].*      FROM [AspNetUsers] AS [u0]      WHERE ((([u0].[Name] LIKE @__name_0 + N'%' AND (CHARINDEX(@__name_0, [u0].[Name]) = 1)) OR (@__name_0 = N'')) AND ([u0].[Deleted] = 0)) AND ([u0].[AppearInSearch] = 1)      ORDER BY [u0].[Verified] DESC, [u0].[DateAdded]      OFFSET @__p_1 ROWS FETCH NEXT @__p_2 ROWS ONLY  ) AS [t]

我想知道为什么它有这个部分:
(CHARINDEX(@__name_0, [u0].[Name]) = 1)) OR (@__name_0 = N''))

不仅喜欢

非常感谢

最佳答案

Entity Framework 提供特殊函数 EF.Functions.Like 以将其用于具有标准 SQL LIKE 语法的 LINQ 表达式。对于 StartWith 模式,表达式将如下所示:

var likeExpression = name+"%";
... await db.ApplicationUsers.Where(u => EF.Functions.Like(u.Name,likeExpression)...

关于sql - StartsWith() 在 LINQ 中不会转换为 Like ('abc%' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44354866/

相关文章:

.net - 是否存在支持 .Net Core 的任何 NHibernate 版本?

c# - 泛型传递类型成员以对泛型集合进行操作

c# - 带有 Docker 的 HTTP 错误 404 dotnet 核心 API

mysql - 使用 MySQL 中的位域列将一行分解为多行

php - 使用(DB2php的)Db2PhpEntity类(或类似的)是否可以将DB中的内容获取到类中?

c# - 如何对字典中的所有项目求平均值并按键求平均值

c# - LINQ 在具有空格分隔值的列表中搜索

c# - ResponseCache 始终将 Cache-Control 设置为 no-cache, no-store in ASP.net core

sql - 如何创建过程以一次运行不同的查询

mysql - 如何在多列上 LEFT JOIN 3 个表