Альтернатива использованию цикла foor в EntityCollection? - PullRequest
1 голос
/ 30 июля 2011

У меня есть следующая структура базы данных, где продукты имеют цену по умолчанию, которая может быть переопределена, если для данного идентификатора найдена строка для этого продукта, если эта строка не существует, возвращается цена по умолчанию. Цены - это EntityCollection, поэтому он не реализует интерфейс IQueryable, я хочу, чтобы эта логика была внутри моей модели, и текущая реализация работает, но использование forloop не кажется очень оптимальным, есть идеи о том, как улучшить этот код?

Таблица

Продукт

ProductID
Name
Price

Скорость

RateID
Name

Цена

PriceID
ProductID
RateID
Price

Модель моего товара:

public partial class Product
{
    public decimal GetPrice(Guid rateId) {

        foreach (Price p in Prices)
            if (p.Rate.RateId == rateId)
                return p.NewPrice;

        return DefaultPrice;
    }
}

Мой контроллер:

    public ActionResult Prices() {

        var products = storeDB.Products
            .Include("Family")
            .Include("Prices")
            .OrderBy(product => product.Name)
            .ToList();

        var viewModel = new  ProductPricesViewModel {
            Products = products.ToList(),
            Rates = storeDB.Rates.ToList()
        };

        return View(viewModel);
    }

1 Ответ

0 голосов
/ 30 июля 2011

1001 * попробовать *

return (from p in Prices where p.Rate.RateId == rateId select p.NewPrice).DefaultIfEmpty (DefaultPrice);

Альтернатива:

return Prices.Where ( p => p.Rate.RateId == rateId ).Select (p.NewPrice).DefaultIfEmpty (DefaultPrice);

см. http://msdn.microsoft.com/de-de/library/bb356814.aspx

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