【发布时间】:2021-07-12 17:19:56
【问题描述】:
我正在实现一个autocomplete 功能,我需要根据用户输入过滤 SQL 表。
因此,要求是过滤应该开始的记录(sort)结果是StartsWith,然后是Contains。
样本数据:
Dotnet 开发人员
Azure 管理员
微软 Azure
Azure 开发运维
用户体验开发人员
物联网 Azure
如果我开始输入 Azu,那么它应该按以下顺序显示结果。
Azure 管理员
Azure DevOps
Microsoft Azu重新
物联网Azu重新
这意味着,我们正在寻找 startswith 逻辑然后是 contains 逻辑的结果。
目前,我尝试了两种方法,但都不起作用。
第一种方法:
dbContext.dbTable.Select(h => h.FieldName.ToLowerInvariant()).Where(e => e.Contains(text)).OrderBy(s => s).Distinct().Take(count).ToList();
第二种方法:
dbContext.dbTable.Where(e => e.FieldName.Contains(text)).OrderBy(h => h.FieldName.IndexOf(text)).ThenBy(c => c.FieldName.Length).Select(p => p.FieldName).Distinct().Take(count).ToList();
如果可以的话,谁能指导我?
【问题讨论】:
-
仅供参考,这个模式被命名为 type ahead。可以帮助您找到其他解决方案:)。但是请您详细说明“没有用”。这是什么意思?
标签: c# .net entity-framework linq