在Linq语句中使用'if'语句

时间:2013-05-01 08:37:20

标签: c# linq xamarin.ios monotouch.dialog

所以,我们试图使用Linq语句显示信息,但我们遇到的问题是,如果变量为“”,我们不希望创建一些元素 - 目前我们无法执行此操作,因为我们无法包含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 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

也许我在这里遗漏了一些东西,但是AFAIK,你只是错过了一个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,
                },
            }
        },
    },
};

答案 2 :(得分: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