我应该怎么写条件Where后GroupBy,以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)
我需要按名称对它们进行分组,并根据两个语句获取这些值:
Important真.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.任何的想法?
听起来你真的不想按"重要" 过滤,而是按顺序排序:
Value = g.OrderByDescending(op => op.Important) // true first
.ThenByDescending(op => op.Priority)
.First()
.Value
Run Code Online (Sandbox Code Playgroud)