目標
List<T>
C#内の各製品の最終価格を計算します。
問題
単純な製品を計算price * quantity
し、結果をビューに返す必要があります。
この構文を見てください:
var productPrice = productsPrices.Find(x => x.productId == 1);
productPrice.finalProductPrice =
(productPrice.promotionalProductPrice != 0 ?
productPrice.promotionalProductPrice :
productPrice.originalProductPrice)
* sessionProducts.Find(x => x.id == 1).quantity;
上記で渡されたコード フラグメントの直前に、製品の ID を格納する文字列があります。以下を参照してください。
string ids = string.Join(", ", sessionProducts.Select(x => x.id));
finalProductPrice
そして、リストの各製品に値を設定する必要があると思いますがproductsPrices
、これをどのように実行できるかわかりません。
この件について私が思ったこと:
私は次のようなものを使用できると考えていました:
productsPrices.Find(x => x.productId == productsPrices.Contains(ids))
.finalProductPrice =
(productsPrices.Find(x => productsPrices.Contains(ids))
.promotionalProductPrice != 0 ?
productsPrices.Find(x => productsPrices.Contains(ids))
.promotionalProductPrice :
productsPrices.Find(x => productsPrices.Contains(ids))
.originalProductPrice) *
sessionProducts.Find(x => x.id == 1).quantity;
しかしもちろん、成功.Contains()
はありません — 文字列では機能しません。
私の本当の質問
リストにfinalProductPrice
含まれる各製品の権限を定義するにはどうすればよいですか? productsPrices
内の各 ID を に渡すにはどうすればよいstring ids [...]
ですx.productId == something
か?
ヒントを歓迎します (例:を使用しないで、代わり.Find()
に使用してください!).Select()
スポットライト コード
ActionResult
私のビューに必要なすべての情報を送信する私に従ってください:
比較.cs :
public ActionResult Compare()
{
List<getMarkets_Result> markets = Markets.Build();
SessionStore sessionStore = new SessionStore();
List<getSpecificProductToShoppingList_Result> sessionProducts =
sessionStore.Get("ProductsSummary", "generic");
string ids = string.Join(", ", sessionProducts.Select(x => x.id));
List<getProductsPrices_Result> productsPrices = Products.PricesList(ids);
ListComparisonViewModel listComparisonViewModel =
new ListComparisonViewModel
{
Markets = markets,
SessionProducts = sessionStore.Get("ProductsSummary", "generic"),
ProductsPrices = productsPrices
};
return View(listComparisonViewModel);
}
productsPrice
必要に応じて、リストのコンテキスト:
public partial class getProductsPrices_Result
{
public decimal originalProductPrice { get; set; }
public decimal promotionalProductPrice { get; set; }
public decimal finalProductPrice { get; set; }
public string productName { get; set; }
public string marketName { get; set; }
public int productId { get; set; }
public int marketId { get; set; }
}
そして、 Products(.cs)というモデルを作成して、製品の背後にあるロジックを実行しました。このモデルが持つ最初の (そして単一の) メソッドは次のCalculateFinalPrice()
とおりです。
public decimal CalculateProductPriceByQuantity(decimal price, int quantity)
{
return price * quantity;
}