2017-07-12 2 views
0

Ici, je suis en dessous de la requête Linq qui a une colonne de durée d'employé. Comment puis-je supprimer "-" lorsque StartDate ou EndDate est nul. Je veux "-" seulement quand les deux ne sont pas nuls.Comment remplacer "-" par un espace vide lorsque les colonnes sont nulles dans LINQ

var query = from r in db.Employee 
      select new 
      { 
       Name = r.Name, 
       EmployeeDuration = r.StartDate +" - "+ r.EndDate 
      } 
+0

pouvez-vous avoir une date de fin sans date de début? – Chris

+0

Les deux dates peuvent-elles être nulles? Quel est le résultat attendu dans ce cas? – DavidG

Répondre

5

Vous pouvez utiliser un opérateur conditionnel.

var query = from r in db.Employee 
     select new 
     { 
      Name = r.Name, 
      EmployeeDuration = r.StartDate != null && r.EndDate != null 
       ? r.StartDate + " - " + r.EndDate 
       : r.StartDate ?? r.EndDate 
     } 

Sortie

When nothing is null = 18.01.2017 18:00 - 18.01.2017 19:00 
When StartDate is null = 18.01.2017 19:00 
When EndDate is null = 18.01.2017 18:00 

Ou une autre approche serait cela.

var query = from r in db.Employee 
     select new 
     { 
      Name = r.Name, 
      EmployeeDuration = 
       (r.StartDate ?? "?") + 
       " - " + 
       (r.EndDate ?? "?") 
     } 

Sortie

When nothing is null = 18.01.2017 18:00 - 18.01.2017 19:00 
When StartDate is null = ? - 18.01.2017 19:00 
When EndDate is null = 18.01.2017 18:00 - ? 
+1

Vous pouvez simplifier la dernière ligne à 'r.StartDate ?? r.EndDate' – DavidG

+0

@DavidG merci de me le faire savoir – NtFreX

0
EmployeeDuration = r.StartDate != null && r.EndDate != null ? r.StartDate + " - " + r.EndDate : String.Empty; 
0
var query = from employee in db.Employee 
      let areDatesNull = employee.StartDate == null 
          || employee.EndDate == null 
      let duration = areDatesNull 
         ? "" 
         : $"{employee.StartDate} - {employee.EndDate}" 
      select new 
      { 
       Name = employee.Name, 
       EmployeeDuration = duration 
      } 
+0

Cela ne fonctionne pas si un seul est null. – DavidG

+0

@DavidG Oh, je vois. Fixé. –

+0

La chaîne vide a toujours besoin d'une valeur, par exemple: '$" {employee.StartDate ?? employee.EndDate} "' – DavidG

0

Quelque chose comme ceci:

var query = from r in db.Employee 
    select new 
    { 
     Name = r.Name 
     , 
     EmployeeDuration = 
     r.StartDate + ((r.StartDate == null || r.EndDate == null) ? string.Empty : " - ") + r.EndDate 
    };