我有以下 ASP.NET Core 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''))
而且不仅仅是喜欢
多谢
实体框架提供了一个特殊的函数 EF.Functions.Like,可将其用于具有标准 SQL LIKE 语法的 LINQ 表达式。对于 StartWith 模式,表达式将如下所示:
var likeExpression = name+"%";
... await db.ApplicationUsers.Where(u => EF.Functions.Like(u.Name,likeExpression)...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)