这里的任何人都可以帮助我解决我们在我们的应用程序中的“搜索”功能的问题,他们希望这两个示例单词具有相同的结果,即玩具和玩具< / strong>即可。
例如,如果他们搜索“玩具”,则应用程序应返回其中包含“玩具”的所有数据或“玩具“反之亦然”玩具“。
我已经在LINQ中使用 .Contains(),因为这是实现此结果的最佳方式,但当我检查“玩具”时,它搜索了“玩具“和”玩具“然后当我搜索”玩具“时,它只搜索”玩具“而不是“的玩具”
以下是我的示例代码:
context.CapabilityHasMethodHasSubstances
.Where(c => c.Substance.SubstanceLocale.Where(x => x.LocaleId == 2057).FirstOrDefault()
.Description.Contains(filter) && !c.IsDeleted)
.Select(c => c.CapabilityId).ToList()
提前感谢能帮我解决问题的人。 :)
答案 0 :(得分:0)
这样做的一个想法是为您的alias
(搜索词)引入一些filter
的集合。
您现在的任务是解决复数形式,这可以通过此实现。此外,如果您以后必须为给定单词指定同义词,则可以轻松扩展它。
Dictionary<string, string> AliasDict = new Dictionary<string, string>()
{
{ "Toys" , "Toy"}, // plural form
{ "Game" , "Toy"}, // synonym
{ "Games" , "Toy"}, // plural synonym
{ "Sheeps" , "Sheep" }
};
public string ResolveAlias(string alias)
{
if (AliasDict.ContainsKey(alias))
{
return AliasDict[alias];
}
return alias;
}
在您的代码中只需使用以下方法:
context.CapabilityHasMethodHasSubstances
.Where(c => c.Substance.SubstanceLocale.Where(x => x.LocaleId == 2057).FirstOrDefault()
.Description.Contains(ResolveAlias(filter)) && !c.IsDeleted)
.Select(c => c.CapabilityId).ToList()
答案 1 :(得分:0)