2013-05-01 324 views
0

因此,我們試圖使用Linq語句顯示信息,但我們遇到的問題是如果變量是「」,我們不希望創建一些元素 - 目前我們無法做到這一點,因爲我們不能在linq語句中包含'if'語句。我們如何解決這個問題;我們的代碼列在下面。在Linq語句中使用'if'語句

(延續 - 我們不想讓「x.Phone」元素顯示,如果將它設置爲「」)

Root = new RootElement ("Student Guide") { 
     new Section("Contacts"){ 
      from x in AppDelegate.getControl.splitCategories("Contacts") 
      select (Element)new RootElement(x.Title) { 
       new Section(x.Title){ 
        (Element)new StyledStringElement("Contact Number",x.Phone) { 
         BackgroundColor=UIColor.FromRGB(71,165,209), 
         TextColor=UIColor.White, 
         DetailColor=UIColor.White, 
        }, 
       } 
      }, 
     }, 
    }; 

回答

3

您可以使用類似:

var root = new RootElement ("Student Guide") { 
    new Section("Contacts"){ 
     from x in AppDelegate.getControl.splitCategories("Contacts") 
     let hasPhone = x.Phone == null 
     select hasPhone 
     ? (Element)new RootElement(x.Title) { 
      new Section(x.Title){ 
       (Element)new StyledStringElement("Contact Number",x.Phone) { 
        BackgroundColor=UIColor.FromRGB(71,165,209), 
        TextColor=UIColor.White, 
        DetailColor=UIColor.White, 
       }, 
      } 
     } 
     : (Element)new RootElement(x.Title) 
    }, 
}; 

或者你可以打破你的Linq外出使用的方法 - 那麼它就會少複製和粘貼代碼 - 例如

var root = new RootElement ("Student Guide") { 
    new Section("Contacts"){ 
     from x in AppDelegate.getControl.splitCategories("Contacts") 
     select Generate(x) 
    }, 
}; 

private Element Generate(Thing x) 
{ 
    var root = new RootElement(x.Title); 
    var section = new Section(x.Title); 
    root.Add(section); 

    if (x.Phone != null) 
     section.Add(new StyledStringElement("Contact Number",x.Phone) { 
        BackgroundColor=UIColor.FromRGB(71,165,209), 
        TextColor=UIColor.White, 
        DetailColor=UIColor.White, 
       }); 

    return root; 
} 
0

潛在使用條件運算符?

string.IsNullOrEmpty(x.Phone) ? "Return Something if it is empty" : x.Phone; 

http://msdn.microsoft.com/en-us/library/ty67wk28(v=vs.80).aspx

+0

雖然,如果不是NullOrEmpty,我將如何使用它創建一個新的'StyledStringElement'?我自己嘗試過,但還沒有弄明白。 – 2013-05-01 08:49:31

+0

@LoadData爲什麼不傳遞一個空字符串?我不知道'StyledSTringElement'是什麼:P – LukeHennerley 2013-05-01 09:20:18

+0

因爲我們需要它作爲StyledStringElement以我們想要的格式顯示文本 - 我不知道我們能做到這點的其他原因。 – 2013-05-01 09:42:45

1

也許我失去了一些東西,但據我所知,你只是缺少一個where條款,不是嗎?

var root = new RootElement ("Student Guide") { 
    new Section("Contacts"){ 
     from x in AppDelegate.getControl.splitCategories("Contacts") 
     where !string.IsNullOrEmpty(x.Phone) 
     select (Element)new RootElement(x.Title) { 
      new Section(x.Title){ 
       (Element)new StyledStringElement("Contact Number",x.Phone) { 
        BackgroundColor=UIColor.FromRGB(71,165,209), 
        TextColor=UIColor.White, 
        DetailColor=UIColor.White, 
       }, 
      } 
     }, 
    }, 
};