从关键字列表中选择不同的记录

本文关键字:记录 选择 关键字 列表 | 更新日期: 2023-09-27 18:34:42

我需要根据搜索生成一个自动完成的关键字列表,其中每个关键字都有一组关键字搜索:

关键字类:

public class Keyword
{
    public int Id { get; set; }
    public string Name { get; set; }
}
public class KeywordSearch
{
    // Primary properties
    public int Id { get; set; }
    public string Name { get; set; }
    public Keyword Keyword { get; set; }
}
因此,如果有像"公司名称">

这样的关键字,我将使用关键字搜索"公司"和"名称"。

我现在拥有的功能运行不佳:

public IList<KeywordDto> GetAllBySearch(string keywords, int numberOfRecords)
{
    var splitKeywords = keywords.Split(new Char[] { ' ' });
    var keywordQuery = _keywordRepository.Query.Where(p => p.IsActive == true);
    var keywordSearchQuery = _keywordSearchRepository.Query;
    var keywordIds = keywordSearchQuery
                        .GroupBy(k => k.Keyword.Id)
                        .Where(g => splitKeywords.All(w => g.Any(k => w.Contains(k.Name))))
                        .Select(g => g.Key);
    IList<KeywordDto> keywordList = (from kw in keywordQuery
                                         join kwids in keywordIds on kw.Id equals kwids
                                         select new KeywordDto { Id = kw.Id, Name = kw.Name })
                                         .Take(numberOfRecords)
                                         .Distinct()
                                         .OrderBy(p => p.Name).ToList();
    return keywordList;
}

我需要根据关键字字符串构建一个关键字列表,因此,如果关键字 = "Compa",我将返回带有粗体样式的"Comp"部分的"公司名称",或者如果关键字 = "Compa Nam",我返回带有"Compa Nam"的"公司名称",带有粗体样式等...

现在发生的事情是它无法在关键字搜索中找到"Comp"部分。

有什么建议吗?

谢谢

从关键字列表中选择不同的记录

如果我没记错的话w.Contains(k.Name)是关键部分。

w"Compa"k.Name是你的关键字搜索"Company""Name"。所以你问"Compa"是否包含"公司"或"名称",这是错误的。

k.Name.Contains(w)(如果您不希望它区分大小写,则k.Name.StartsWith(w, StringComparison.CurrentCultureIgnoreCase)(应返回正确的结果。