GroupBy后的条件选择

Mar*_*ero 3 c# linq lambda

我应该怎么写条件WhereGroupBy,以Select项目基于一个if说法?

我有一个类型的对象列表Option:

class Option {
    public Boolean Important { get; set; }
    public int Priority { get; set; }
    public String Value { get; set; }
    public String Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我初始化我的选项和包含所有选项的列表:

List<Option> myOptions = new List<Option> {
    new Option { Priority = 100, Name = "Color", Value = "Red", Important = true },
    new Option { Priority = 150, Name = "Color", Value = "Blue" },
    new Option { Priority = 100, Name = "Font", Value = "16" },
    new Option { Priority = 150, Name = "Font", Value = "32"
};
Run Code Online (Sandbox Code Playgroud)

所以我有类似的东西:

///MY Options///
/// NAME --- VALUE --- PRIORITY --- IMPORTANT
/// Color -- Red ----- 100----------True
/// Color -- Blue ---- 150----------False
/// Font-----16--------100----------False
/// Font-----32--------150----------False
/// 
Run Code Online (Sandbox Code Playgroud)

我需要按名称对它们进行分组,并根据两个语句获取这些值:

  1. 以最优先的那个为Important真.
  2. 如果没有项目Important,请选择最优先的项目.

所以目标应该是:

    ///Color - Red  //Because has the most priority being Important
    ///Font - 32    //Because has the most priority and there's no Important
Run Code Online (Sandbox Code Playgroud)

我试图避免多次迭代,所以我正在构建一个Linq查询...没有成功.

.Select(g => new {
    Name = g.Key,
     Value = g.Where(op => op.Important).OrderByDescending(op => op.Priority).First().Value
}).ToList();
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决Where.任何的想法?

Jon*_*eet 7

听起来你真的不想按"重要" 过滤,而是按顺序排序:

Value = g.OrderByDescending(op => op.Important) // true first
         .ThenByDescending(op => op.Priority)
         .First()
         .Value
Run Code Online (Sandbox Code Playgroud)