C# 如何按最相似性/相等性对linq结果排序
我想做一个搜索的音乐工具,其中有它的信息的名称,类别和原产地,因为我要求在 但是现在我想根据关键字的相似性/相等性对结果进行排序/分组,例如。 如果我有名单 {鼓、大钢琴、吉他、吉他手、竖琴、钢琴}选择类别。包含(项。类别)) .Where(item=>SelectedOrigins.Contains(item.origin)) 。其中(项目=> { 如果( (“”+item.Name.ToLower())。包含(“+query.ToLower()) ||item.Name.IndexOf(查询)!=-1 ) { 返回true; } 返回false; } ) .采取(30); 返回result.ToList(); } 或者结果可能像我所说的“按发生顺序”,C# 如何按最相似性/相等性对linq结果排序,c#,linq,search,linq-to-objects,C#,Linq,Search,Linq To Objects,我想做一个搜索的音乐工具,其中有它的信息的名称,类别和原产地,因为我要求在 但是现在我想根据关键字的相似性/相等性对结果进行排序/分组,例如。 如果我有名单 {鼓、大钢琴、吉他、吉他手、竖琴、钢琴}选择类别。包含(项。类别)) .Where(item=>SelectedOrigins.Contains(item.origin)) 。其中(项目=> { 如果( (“”+item.Name.ToLower())。包含(“+query.ToLower()) ||item.Name.IndexOf(查询
对我来说没关系 接下来要做的事情是我需要搜索名称、类别或来源,例如。
如果我输入“意大利”,它应该是钢琴或意大利的东西。
或者,如果我输入“字符串”,它应该会找到吉他 有没有办法做这些事,请告诉我
提前谢谢。您想要
OrderBy
/OrderBy降序
--
至于StringSimilarityScore的定义——完全模糊匹配是最好的,但您可以根据搜索字符串匹配的名称的比例来量化匹配:
double StringSimilarityScore(string name, string searchString)
{
if (name.Contains(searchString))
{
return (double)searchString.Length / (double)name.Length;
}
return 0;
}
您可能想考虑名称中的搜索字符串的位置(更早更好),对于指定一个字母的情况——但我将留给您。p> 为什么这个社区是维基?不应该。对不起,我是新来的,我不知道什么是社区维基,我可能无意中检查了它(我真的不知道它被检查了!)。现在我在读社区是什么。很抱歉
result = InstrumentsList.
.Where(...)
.OrderByDescending(instrument =>
StringSimilarityScore(instrument.Name, searchString))
.Take(30);
double StringSimilarityScore(string name, string searchString)
{
if (name.Contains(searchString))
{
return (double)searchString.Length / (double)name.Length;
}
return 0;
}