Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按最相似性/相等性对linq结果排序_C#_Linq_Search_Linq To Objects - Fatal编程技术网

C# 如何按最相似性/相等性对linq结果排序

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(查询

我想做一个搜索的音乐工具,其中有它的信息的名称,类别和原产地,因为我要求在

但是现在我想根据关键字的相似性/相等性对结果进行排序/分组,例如。 如果我有名单

{鼓、大钢琴、吉他、吉他手、竖琴、钢琴}选择类别。包含(项。类别)) .Where(item=>SelectedOrigins.Contains(item.origin)) 。其中(项目=> { 如果( (“”+item.Name.ToLower())。包含(“+query.ToLower()) ||item.Name.IndexOf(查询)!=-1 ) { 返回true; } 返回false; } ) .采取(30); 返回result.ToList(); } 或者结果可能像我所说的“按发生顺序”,
对我来说没关系

接下来要做的事情是我需要搜索名称、类别或来源,例如。
如果我输入“意大利”,它应该是钢琴或意大利的东西。
或者,如果我输入“字符串”,它应该会找到吉他

有没有办法做这些事,请告诉我


提前谢谢。

您想要
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;
}