2016-11-22 3 views
0

Ich habe eine LINQ-Abfrage, um Suchdaten zurückzugeben. Ein Bool-Parameter wird als aktiv übergeben.Elegante boolesche LINQ-Abfrage flexibel für Active = true oder Active = true oder false

ich entweder nur die Zeilen, in denen aktiv = true OR return alle Zeilen unabhängig von aktivem Status zurückkehren wollen Gibt es eine elegante Möglichkeit, dies in der where-Klausel von LINQ zu tun?

  return await (from p in db.PackSizeTypes.AsNoTracking() 
      where p.Active == true 
      orderby p.ID 

      select new PackSizeTypeObject 
      { 
       ID = p.ID, 
       Name = p.Name.Trim(), 
       LastEditedDate = p.LastEditedDate, 
       LastEditedBy = p.LastEditedBy, 
       Active = p.Active 
      }).ToListAsync(); 

Gibt es eine Möglichkeit, einen ternären Operator in der WHERE-Klausel zu verwenden, um diesen Schalter bereitzustellen?

+0

wenn du wahr oder alles willst, ist das nicht alles? –

+0

Ja, aber auf einem Verarbeitungsformular muss nur angezeigt werden, wo active = true ist. Auf einem Konfigurationsformular muss es zeigen, wo active = egal ist :-) – Martin

+0

Ich frage mich, wie Sie entscheiden, ob Sie nur aktive Einträge oder alle Einträge erhalten wollen? Gibt es einen zweiten Parameter? – TripleEEE

Antwort

1
IEnumerable<PackSizeTypeObject> MyPackSizeTypeObjects(bool? isActive) 
{ 

return await (from p in db.PackSizeTypes.AsNoTracking() 
      where p.Active == (isActive == null ? p.Active : isActive) 
      orderby p.ID 

select new PackSizeTypeObject 
     { 
      ID = p.ID, 
      Name = p.Name.Trim(), 
      LastEditedDate = p.LastEditedDate, 
      LastEditedBy = p.LastEditedBy, 
      Active = p.Active 
     }).ToListAsync(); 
} 
+0

Brilliant - das funktioniert wie ein Zauber! Ich weiß nicht, warum ich keinen null-fähigen Booleschen Wert betrachtet habe. Danke Leute! – Martin

Verwandte Themen