2012-04-02 8 views
3

Ich versuche, Dezimalwert mithilfe von LINQ in einem MVC3-Projekt zu erhalten.Wählen Sie den Dezimalwert über LINQ

Wie bekomme ich es? Es sieht einfach aus, aber ich kann nicht einen einzigen Dezimalwert nicht Liste, die Product.aWeekPrice ist.

Wie kann ich den bestimmten threeDayPrice bekommen? Nachdem sie threeDayPrice, wird es für die Gewährung unterschiedliche Bedingungen in, wenn die Bedingung verwendet werden, wie Sie unten in meinem Code zu sehen:

public decimal GetTotal(decimal price) 
    { 
     // Multiply product price by count of that album to get 
     // the current price for each of those product in the cart 
     // sum all product price totals to get the cart total 

     //In select part, I have got error, 'cannot convert type 
     //'System.Linq.IQueryable<decimal>' to 'decimal' 

     decimal threeDayPrice = (from cartItems in db.Cart 
           where cartItems.cartId == ShoppingCartId 
           select (decimal)cartItems.Product.threeDayPrice); 

     decimal aWeekPrice = (from cartItems in db.Cart 
           where cartItems.cartId == ShoppingCartId 
           select (decimal)cartItems.Product.aWeekPrice); 

     if (price == threeDayPrice) 
     { 
      decimal? total = (from cartItems in db.Cart 
           where cartItems.cartId == ShoppingCartId 
           select (int?)cartItems.count * cartItems.Product.threeDayPrice).Sum(); 
      return total ?? decimal.Zero; 
     } 

     else if (price == aWeekPrice) 
     { 
      decimal? total = (from cartItems in db.Cart 
           where cartItems.cartId == ShoppingCartId 
           select (int?)cartItems.count * cartItems.Product.aWeekPrice).Sum(); 
      return total ?? decimal.Zero; 
     }   
    } 
+0

Was ist der Datentyp von threeDayPrice/aWeekPrice? Sind sie eine Sammlung von Dezimalzahlen oder nur Dezimalzahlen? – McGarnagle

+0

Diese Frage hat nichts mit MVC zu tun. Es ist eine Datenbank-Frage, also ist es entweder Entity Framework oder Linq zu SQL, nicht sicher, welche –

Antwort

5

Wenn Ihre Abfrage immer gibt nur einen Wert Verwendung .Single() es als decimal zu bekommen statt eine Sammlung von Dezimalzahlen.

decimal threeDayPrice = (from cartItems in db.Cart 
          where cartItems.cartId == ShoppingCartId 
          select (decimal)cartItems.Product.threeDayPrice).Single(); 

    decimal aWeekPrice = (from cartItems in db.Cart 
          where cartItems.cartId == ShoppingCartId 
          select (decimal)cartItems.Product.aWeekPrice).Single(); 

Wenn es eine Möglichkeit gibt, dass die Abfrage mehr zurückkehren wird dann ein oder Null-Elemente First()/FirstOrDefault() stattdessen verwenden.

+0

Vielen Dank für die Antwort, aber wenn ich .Single() oder First(), oder FirstOr Default(), geschieht es Fehler auf öffentlichen Dezimal GetTotal (Dezimalpreis). Es heißt, dass nicht alle Codepfade einen Wert zurückgeben. Was heißt das? – wholee1

+0

Dies ist kein LINQ-Fehler. In Ihrer Methode wird kein Wert zurückgegeben, wenn ('price! = ThreeDayPrice und price! = AWeekPrice') (keine if-Anweisung, die dann ausgeführt wird). Sie sollten 'return decimal.Zero;' am Ende der Methode hinzufügen. – MarcinJuraszek

+0

Vielen Dank für Ihre Art! Vielen Dank. – wholee1

3

Diese Fehlermeldung zeigt an, dass cartItems.Product.aWeekPrice eine Sammlung ist, keine einzelne. Sie müssen also nur das gewünschte Element auswählen. Zum Beispiel:

decimal threeDayPrice = (from cartItems in db.Cart 
        where cartItems.cartId == ShoppingCartId 
        select (decimal)cartItems.Product.threeDayPrice).FirstOrDefault(); 

sollten die Fehlermeldung entfernen, aber es wird tun, indem Sie auf das erste Element in dem „threeDayPrice“ Feld auswählen.