如何在Linq中对项目类别进行排序

4

我有20条记录

我想按照优先级字段对记录进行排序。

优先级字段有3个值(高,中,低

我想依次显示高,中,低的记录。

var groupedRecords = records.GroupBy(x => x.Priority == "High") // confused here...

注意:我希望先获取记录,然后是中等记录,最后是记录。


你是否需要处理字符串?如果你仍然可以更改它们,请考虑将优先级迁移到枚举。这将使你的生活更加轻松。 - Andrei
4个回答

6

为什么不将优先级映射成整数呢:

  High   -> 1
  Medium -> 2
  Low    -> 3 

所以它可能是这样的:
  var groupedRecords = records.
    OrderBy(x => (x.Priority == "High") 
      ? 1 
      : (x.Priority == "Medium") ? 2 : 3);

3

你希望对列表进行排序,因此可以使用OrderByOrderByDescending扩展方法。

var orderedRecords = records.OrderByDescending(x => x.Priority == "High").ThenByDescending(x => x.Priority == "Medium");

对于中低记录,如何进行分组? - StackOverflow
@HimBromBeere 你错了。Predicate<T> 本质上是 Func<T,bool>,所以这段代码可以编译通过。 - kkyr
简单明了的解决方案。 - StackOverflow

0

请尝试以下:

var groupedRecords = records.OrderBy(x => x.Priority == "High").ThenBy(x => x.Priority == "Medium").ThenBy(x => x.Priority == "Low");

0

一种方法是

 var result = records.Where(x => x.Priority == "High")
                     .ToList()
                     .AddRange(records.Where(x => x.Priority == "Medium").ToList())
                     .AddRange(records.Where(x => x.Priority == "Low").ToList());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接