我有以下数据库结构,其中产品具有可以覆盖的默认价格,如果找到针对给定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);
}
答案 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);