在 linq 查询中使用 'Contains'

Using 'Contains' in linq query

考虑以下查询:

  public async Task<IEnumerable<string>> GetItemNo(string itemNumber)
    {
        return await itemDbContext.Item
                     .Where(p => p.ItemNo.Contains(itemNumber)) 
                     .Select(p => p.ItemNo).ToListAsync();

    }

而不是检查传入的字符是否以相同的顺序存在(这就是“.Contains”现在的工作方式)。

如何 return ItemNos(字符串)列表,即使匹配的字符很少,即使字符在不同的地方匹配。

例如:如果我传入“appl”或“apole”或“dpple”。我希望数据库列出“苹果”。谢谢。

您需要使用一个指标来告诉您字符串匹配是否“足够好”。一个这样的指标是 Levenshtein distance。您可以计算输入字符串与集合中所有字符串之间的距离,然后 select 集合中距离足够小的那些条目。

您可以编写一个函数来比较这两个字符串 bool IsMatch(string a, string b); 并在 Where 查询中使用它

.Where(p => IsMatch(p.ItemNo, itemNumber) == true)