2011-07-30 2 views
1

私は次のデータベース構造を持っていますが、その商品のデフォルト価格は、その商品の行が特定のrateIDで見つかった場合、その行が存在しない場合に上書きすることができます。価格はEntityCollectionなので、IQueryableインターフェイスは実装されていません。私のモデルの中にこのロジックを持ちたいのですが、現在の実装はうまく機能しますが、forloopを使用するのは最適ではないようです。EntityCollectionでfoorループを使用する代わりに?

テーブル

製品

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

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

を参照
関連する問題