在EntityCollection中使用for循环的替代方法?

时间:2011-07-30 13:52:02

标签: sql database linq entity-framework linq-to-sql

我有以下数据库结构,其中产品具有可以覆盖的默认价格,如果找到针对​​给定rateID的该产品的行,如果该行不存在则返回默认价格。价格是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 :(得分:0)

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