顺序i可按出现次数枚举

本文关键字:枚举 顺序 | 更新日期: 2023-09-27 17:49:28

我有一个来自Linq2Sql的实体的可枚举集合(在此阶段它们已被枚举到一个数组)。集合可能(很可能)包含同一实体的多次出现。如何对集合进行排序,以便将最经常出现的实体移到前面?

IEnumerable<Entity> results = SearchForEntities(searchCriteria);
return results.OrderByDescending(e => /* Number of occurences in results? */)
              .Distinct()
              .Take(maxSearchResults);

有什么帮助我应该把在orderby降序表达式?

提前感谢!:)

编辑:澄清要求。在集合中出现多次的实体具有唯一id,但是不是对同一对象的引用。

顺序i可按出现次数枚举

return results.GroupBy(r => r)
              .OrderByDescending(g => g.Count())
              .Select(g => g.Key)
              .Take(maxSearchResults);
问题是:集合是否包含具有相同ID的多个实体,或者实际上存在对相同实体对象的多个引用?

如果第一个是正确的(按ID),您可能需要这样做:

return results.GroupBy(r => r.ID)
              .OrderByDescending(g => g.Count())
              .Select(g => g.First())
              .Take(maxSearchResults);

试试这个:

IEnumerable<Entity> results = SearchForEntities(searchCriteria);
return results.OrderByDescending(e => results.Where(a=>a == e).Count())
          .Distinct()
          .Take(maxSearchResults);