2016-06-30 9 views
0

vereinfachen Jemand, der mir in die richtige Richtung zeigen könnte, um den folgenden Code mit switch-Anweisung zu vereinfachen?Wie Bedingtes Lambda mit Hilfe von Schalter

var indicators = db.Sses 
      .GroupBy(x => x.Estado) 
      .Select(x => new IndicatorViewModel 
      { 
       Count = x.Count(), 
       IndicatorType = x.Key.ToString(), 
       IndicatorClass = 
       EstadoServicio.Nuevo == x.Key ? "bg-red" : 
       (EstadoServicio.Proceso == x.Key ? "bg-yellow" : 
       (EstadoServicio.Aprobación == x.Key ? "bg-aqua" : "bg-green")) 
      , 
       IconClass = 
       EstadoServicio.Nuevo == x.Key ? "fa-bookmark-o" : 
       (EstadoServicio.Proceso == x.Key ? "fa-bell-o" : 
       (EstadoServicio.Aprobación == x.Key ? "fa-calendar-o" : "fa-heart-o")), 
       Total = x.Count()/total 
      }); 
+0

Ich sage es jetzt vereinfacht wird. Warum willst du 'wechseln'? – Rahul

+0

Nur zukünftige Wartung als unterschiedliche Status-Skalen mehr und mehr vorhersehen ... – parismiguel

Antwort

0

Sie können etwas tun, wenn Sie wollen Schaltergehäuse verwenden:

 var indicators = db.Sses 
      .GroupBy(x => x.Estado) 
      .Select(
       delegate(YOUR_TYPE x) 
       { 
        var ivm = new IndicatorViewModel 
        { 
         Count = x.Count(), 
         IndicatorType = x.Key.ToString(), 
         Total = x.Count()/total 
        }; 

        switch (x.Key) 
        { 
         case "bg-red": 
          ivm.IndicatorClass = EstadoServicio.Nuevo; 
          //ivm.IonClass = 
          break; 

         // etc. 
        } 

        return ivm; 
       } 
      ); 
+0

Danke moller1111 ... Ich bin mir nicht sicher was ich als "YOUR-TYPE" verwenden soll ... – parismiguel

+0

Der Typ des Parameters 'x'. Wenn Sie nicht sicher sind, was es ist, versuchen Sie, es mit der Maus in Ihrem eigenen Lamda-Ausdruck zu bewegen. VS sollte es entlasten. –

+0

X stellt mein DataSet oder meine Tabelle dar, hat jedoch keine Felder mit dem Namen Count oder Key, da sie nur auf meinem ViewModel angezeigt werden. Mit anderen Worten, wenn ich meinen Typ "table" verwende, die Felder Count und Key werden nicht mehr erkannt – parismiguel

0

Vielen Dank moller1111 ... Ich habe Figur es mit Ihrer Hilfe aus! Dies ist der letzte Arbeitscode, falls jemand anderes braucht es:

  var db = new ApplicationDbContext(); 
     int total = db.Sses.Count(); 

     var indicators = db.Sses 
     .GroupBy(x => x.Estado) 
     .Select(
     delegate(IGrouping<EstadoServicio,Ss> x) 
     { 
      var ivm = new IndicatorViewModel 
      { 
       Count = x.Count(), 
       IndicatorType = x.Key.ToString(), 
       Total = total 
      }; 

      switch (x.Key) 
      { 
       case EstadoServicio.Nuevo: 
        ivm.IndicatorClass = "bg-red"; 
        ivm.IconClass = "fa-bookmark-o"; 
        break; 

       case EstadoServicio.Proceso: 
        ivm.IndicatorClass = "bg-yellow"; 
        ivm.IconClass = "fa-bell-o"; 
        break; 

       case EstadoServicio.Aprobación: 
        ivm.IndicatorClass = "bg-aqua"; 
        ivm.IconClass = "fa-calendar-o"; 
        break; 

       default: 
        ivm.IndicatorClass = "bg-green"; 
        ivm.IconClass = "fa-heart-o"; 
        break; 
      } 

      return ivm; 
     } 
);