2016-01-20 67 views
3

基於if聲明,我應該如何在GroupBySelect項目之後編寫條件WhereGroupBy後的條件選擇

Option類型的對象的列表:

class Option { 
    public Boolean Important { get; set; } 
    public int Priority { get; set; } 
    public String Value { get; set; } 
    public String Name { get; set; } 
} 

我初始化我的選項和一個列表與他們:

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" 
}; 

所以,我有喜歡的東西:

///MY Options/// 
/// NAME --- VALUE --- PRIORITY --- IMPORTANT 
/// Color -- Red ----- 100----------True 
/// Color -- Blue ---- 150----------False 
/// Font-----16--------100----------False 
/// Font-----32--------150----------False 
/// 

我需要按名稱對它們進行分組,並根據兩條語句採取這些值:

  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 

我試圖避免多次重複,所以我建立一個LINQ查詢......沒有成功。我不知道如何解決Where。任何想法?

+1

速記 - 你'myOptions'初始化是* *很多簡單使用集合初始化器和對象初始化器。 –

+0

謝謝@JonSkeet,的確如此。該類只是爲了專注於Linq –

+2

是的,但是您的示例代碼越簡單,就越容易集中於排序部分。您的25行初始化可能非常容易。 –

回答

7

這聽起來像你說的「重要」但它爲了真想過濾

Value = g.OrderByDescending(op => op.Important) // true first 
     .ThenByDescending(op => op.Priority) 
     .First() 
     .Value