2013-05-01 3 views
0

Итак, мы пытаемся отобразить информацию с помощью оператора Linq, но проблема, которую мы имеем, заключается в том, что мы не хотим, чтобы некоторые элементы были созданы, если переменная «» - в настоящее время мы являемся не удалось сделать это, поскольку мы не можем включить оператор if if в оператор linq. Как нам обойти это? приведенный ниже код.Использование операторов «if» в операторе Linq

(например - Мы не хотим элемент в «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

Хотя, как бы я использовал это, чтобы создать новый «StyledStringElement», если это не NullOrEmpty? Я попытался это сделать, но пока не могу понять. –

+0

@LoadData Почему бы просто не пройти пустую строку? Я не знаю, что такое «StyledSTringElement»: P – LukeHennerley

+0

Потому что нам нужно, чтобы он был как StyledStringElement для отображения текста в нужном формате. Причина, по которой я не знаю, как еще мы можем это сделать. –

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, 
       }, 
      } 
     }, 
    }, 
}; 
Смежные вопросы