C# 按LINQ C的单词出现次数进行的复杂排序列表#

C# 按LINQ C的单词出现次数进行的复杂排序列表#,c#,linq,C#,Linq,可能重复: 我在这里贴了一个类似的问题,得到了一个不起作用的答案。这是我需要排序的数据 ID Title --- ------ 1 JCB Excavator - ECU P/N: 728/35700 2 Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899 3 Geo Prism 1995 - Geo ABS #16213899 4 Geo Prism 1995 - A

可能重复:

我在这里贴了一个类似的问题,得到了一个不起作用的答案。这是我需要排序的数据

  ID     Title
  ---    ------
  1      JCB Excavator - ECU P/N: 728/35700
  2      Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899
  3      Geo Prism 1995 - Geo ABS #16213899
  4      Geo Prism 1995 - ABS #16213899
  5      Wie man BBA reman erreicht
  6      this JCB test JCB
  7      Ersatz Airbags, Gurtstrammer und Auto Körper Teile
我的搜索数据类似于“JCB GEO”。我想以这样一种方式对其进行排序,使数据

  ID     Title
  ---    ------
  2      Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899
  3      Geo Prism 1995 - Geo ABS #16213899
  4      Geo Prism 1995 - ABS #16213899
  6      this JCB test JCB
  1      JCB Excavator - ECU P/N: 728/35700
  5      Wie man BBA reman erreicht
  7      Ersatz Airbags, Gurtstrammer und Auto Körper Teile
首先出现的行是数据具有最长时间的行。因此,对于GEO而言,单词在大多数行中的时间最长。ID 2有最长时间,单词GEO,下一行有2个GEO单词

我说我发布了这个问题,并得到了下面的答案,这是行不通的

List<SearchResult> list = new List<SearchResult>() {
  new SearchResult { Description = "JCB Excavator - ECU P/N: 728/35700" },
  new SearchResult { Description = "Geo Prism 1995 - ABS #16213899" },
  new SearchResult { Description = "Geo Prism 1995 - ABS #16213899" },
  new SearchResult { Description = "Geo Prism 1995 - ABS #16213899" },
  new SearchResult { Description = "Wie man BBA reman erreicht" },
  new SearchResult { Description = "this test JCB" },
  new SearchResult { Description = "Ersatz Airbags, Gurtstrammer und Auto Körper  Teile"   }            
};
var wordsToFind = "Geo JCB".Split();
var values = list.Select(x => new { SearchResult = x, Count = x.Description.Split(' ')
  .Where(c => wordsToFind .Contains(c)).Count() })
  .OrderByDesending(x => x.Count)
  .Select(x => x.SearchResult);
List List=新列表(){
新的搜索结果{Description=“JCB挖掘机-ECU零件号:728/35700”},
新的搜索结果{Description=“Geo Prism 1995-ABS#16213899”},
新的搜索结果{Description=“Geo Prism 1995-ABS#16213899”},
新的搜索结果{Description=“Geo Prism 1995-ABS#16213899”},
新的搜索结果{Description=“Wie man BBA reman erreicht”},
新的搜索结果{Description=“this test JCB”},
新的搜索结果{Description=“Ersatz Airbags,Gurtstrammer and Auto Körper Teile”}
};
var wordsToFind=“Geo JCB”.Split();
var values=list.Select(x=>new{SearchResult=x,Count=x.Description.Split(“”)
.Where(c=>wordsToFind.Contains(c)).Count()})
.OrderByDesending(x=>x.Count)
.选择(x=>x.SearchResult);

也许你可以这样做? 我用来测试的主控制台程序

static void Main(string[] args)
        {
            var list = SearchResult.GetResult();
            var wordArray = "Geo,JCB".Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            list.Sort((a, b) => {
                int sum1 = 0, sum2=0;
                foreach (var item in wordArray)
                {
                    sum1 += Regex.Matches(a.Description, item).Count;
                    sum2 += Regex.Matches(b.Description, item).Count;
                }

                if (sum1 < sum2) return 1;
                else if (sum1 > sum2) return -1;
                else return 0;
            });
            foreach (var item in list)
            {
                Console.WriteLine(item.Description);
            }
            Console.ReadKey();
        }

如果你得到了一个不起作用的答案,请接受这个答案,并与积极参与你问题的人交谈,以获得一个有效的答案。用多个相同的问题污染网站不是一个好办法。很抱歉,出现了许多语法错误。请将代码粘贴到我们的VS2010 IDE中并运行它…然后你会看到很多编译错误。请查看并返回无错误代码给我,因此我可以测试它,看看您的代码是否可以根据我的要求返回结果集。谢谢。。我习惯在这里直接输入代码,因此留下了很多语法错误。。我只是编辑我的回复,仍然有相同的错误。如果可能,请在VS2010 IDE中复制您的代码并尝试编译,然后您会看到很多错误。谢谢我编辑了我的ans。。现在没有语法错误:)我想先显示那些有搜索词最长时间的行。GEO在大多数行中都可以找到,所以这些行应该放在与单词GEO相关的第一行,然后是与JCB相关的行。我希望你需要修改一下代码。谢谢
public class SearchResult
    {
        public string Description { get; set; }
        public static List<SearchResult> GetResult()
        {
            var list = new List<SearchResult>()
            {
                new SearchResult(){Description = "JCB Excavator - ECU P/N: 728/35700"},
                new SearchResult(){Description = "Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899"},
                new SearchResult(){Description = "Geo Prism 1995 - Geo ABS #16213899"},
                new SearchResult(){Description = "Geo Prism 1995 - ABS #16213899"},
                new SearchResult(){Description = "Wie man BBA reman erreicht"},
                new SearchResult(){Description = "this JCB test JCB"},
                new SearchResult(){Description = "Ersatz Airbags, Gurtstrammer und Auto Körper  Teile"}
            };
            return list;
        }
    }
Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899
Geo Prism 1995 - Geo ABS #16213899
this JCB test JCB
Geo Prism 1995 - ABS #16213899
JCB Excavator - ECU P/N: 728/35700
Ersatz Airbags, Gurtstrammer und Auto Körper  Teile
Wie man BBA reman erreicht