2009-06-23 5 views
20

J'essaie de produire une instruction conditionnelle IF à l'intérieur d'un "select new" qui vérifie les valeurs de deux champs afin de remplir une propriété.Instruction IF dans un SELECT LINQ

from e in Employees 
where e.EmployeeID == id 
select new { 
    EmployeeID = e.EmployeeID, 
    EmployeeName = e.FirstName + " " + e.LastName, 
    Status = (if e.col1.HasValue then "This Value" else if e.col2.HasValue then "Other Value") 
} 

Les colonnes sont nullables et par conséquent les types de colonnes sont DateTime? Types de données.

Seule l'une ou l'autre des colonnes aura une valeur de date/heure, pas les deux.

Comment puis-je faire cela?

Répondre

45
Status = e.col1.HasValue ? "This Value" : (e.col2.HasValue ? "Other Value" : null) 
+0

Parfait. Merci. – kntcnrg

+0

Vous bel homme, je recevais une exception NullReferenceException sur Windows Phone lors du retour Contact.Companies ... essayer d'obtenir Contact.Companies.FirstOrDefault(). CompanyName dans une requête LINQ était en train de bombarder ... ce qui suit a bien fonctionné! CompanyName = (c.Companies.Count()> 0)? c.Companies.FirstOrDefault(). CompanyName: "" –

3

utiliser l'opérateur coelacing null pour cette

Status = e.col1.HasValue ? e.col1.Value ?? "This Value" : e.col2.Value ?? "Other Value" 
+1

En fait, il fait l'inverse de ce que l'OP spécifie. –

+1

oui vous avez raison – Rony

Questions connexes