在 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)
考虑以下查询:
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)