выберите десятичное значение через LINQ - PullRequest
3 голосов
/ 02 апреля 2012

Я пытаюсь получить десятичное значение с помощью LINQ в проекте MVC3.

Как мне это получить? это выглядит простым вопросом, но я не могу получить одно десятичное значение, а не список, который является Product.aWeekPrice.

Как я могу получить конкретный трехдневный тариф? После получения threeDayPrice он будет использоваться в условии if для предоставления других условий, как вы можете видеть в моем коде ниже:

    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;
        }        
    }

Ответы [ 2 ]

5 голосов
/ 02 апреля 2012

Если ваш запрос всегда возвращает только одно значение, используйте .Single(), чтобы получить его как decimal вместо набора десятичных дробей.

    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();

Если существует вероятность того, что запрос вернет более одного или нуля элементов, используйте First() / FirstOrDefault().

3 голосов
/ 02 апреля 2012

Это сообщение об ошибке указывает, что cartItems.Product.aWeekPrice является коллекцией, а не одной.Итак, вам просто нужно выбрать тот элемент, который вам нужен.Например:

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

должно удалить сообщение об ошибке, но это будет сделано путем выбора первого элемента в поле threeDayPrice.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...