您可以使用“分组依据” +“排序依据”。详细信息请参见LINQ 101
var list = new List<string> {"a", "b", "a", "c", "a", "b"};var q = from x in list group x by x into g let count = g.Count() orderby count descending select new {Value = g.Key, Count = count};foreach (var x in q){ Console.WriteLine("Value: " + x.Value + " Count: " + x.Count);}针对 此帖子(现已删除):
如果您有一些自定义对象的列表,则需要使用自定义比较器或按特定属性分组。
查询也无法显示结果。向我们显示完整的代码以获得更好的帮助。
根据您的最新更新:
您具有以下代码行:
group xx by xx into g
由于xx是自定义对象系统,因此不知道如何将一项与另一项进行比较。正如我已经写过的,您需要指导编译器并提供一些将用于对象比较的属性或提供自定义比较器。这是一个例子:
请注意,我使用 Foo.Name 作为键-即将根据 Name 属性的值对对象进行分组。
有一个问题-您根据对象的名称将2个对象视为重复对象,但是Id呢?在我的示例中,我只是获取组中第一个对象的ID。如果您的对象具有不同的ID,则可能是一个问题。
//Using extension methodsvar q = list.GroupBy(x => x.Name) .Select(x => new {Count = x.Count(), Name = x.Key, ID = x.First().ID}) .OrderByDescending(x => x.Count);//Using LINQvar q = from x in list group x by x.Name into g let count = g.Count() orderby count descending select new {Name = g.Key, Count = count, ID = g.First().ID};foreach (var x in q){ Console.WriteLine("Count: " + x.Count + " Name: " + x.Name + " ID: " + x.ID);}


