亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不確定如何正確地將數據提取到包含 string、int 和 double 屬性的類列表中

不確定如何正確地將數據提取到包含 string、int 和 double 屬性的類列表中

C#
偶然的你 2023-08-20 14:21:26
我正在使用 asp.net MVC,試圖制作一個表格來顯示品牌在幾天內每天的總利潤,并且我正在努力解決如何包含品牌凈利潤為 0 的日子。在我查詢商店在給定時間范圍內的購買總數后,在名為purchaseQuery的變量中,它為我提供了品牌名稱、購買日期(作為整數)、該商品的價格以及該商品的數量在那次交易中購買的。假設每個品牌只銷售一種產品,并且該產品的價格每天都會波動。該代碼位于該查詢之后。purchasedItems = new List<BrandsTransactionItem>();foreach (var query in purchaseQuery){BrandsTransactionItem tempItem;tempItem = purchasedItems.Where(e => e.day == query.day).Where(e => e.brandName == query.brandName).FirstOrDefault();//If item not in list already, if (tempItem == null){   purchasedItems.Add(new BrandsTransactionItem()   {    brandName = query.brandName,    day = query.day,    totalPurchased = query.TotalPurchased,    costOfItem = query.costOfItem   });}// if it already exists, just add to amount purchasedelse{  tempItem.totalPurchased += query.totalPurchased;}}foreach (var item in purchasedItems){  double dailyProfit = (double)(item.totalPurchased * item.costOfItem);  dailyProfit = Math.Round(dailyProfit, 2); // make it decimal of 2  // Items is the list that I want to display in MVC  Items.Add(new BrandsProfit(){  brandName = item.brandName,  day = item.day,  totalDailyProfit = dailyProfit  });}我想要進行轉換,以便 BrandsProfit 具有名稱、日期列表以及與每一天相對應的每日利潤列表。這樣,商品列表中的每個商品都將具有唯一的品牌名稱,因為它將適用于每次購買,而不是僅適用于購買該品牌商品的日期。我覺得我把事情變得過于復雜了,我主要擔心的是,如果一個品牌一天有 0 次購買,我可能會得到一個大小為 5 的天數列表,以及一個大小為 的購買列表4、我需要它們的尺寸相同。感謝您的幫助,并感謝您花時間閱讀我的問題。
查看完整描述

1 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

此類問題非常適合使用 LINQ。


下面的 LINQ 查詢首先創建不同日期和品牌名稱的外連接。這為我們提供了全天可以加入的所有品牌的列表。這樣,每個品牌都會有相同的天數,即使它在某一天從未售出任何商品。


然后,它會根據該品牌/日期列表加入購買,如果當天沒有記錄該品牌的購買,則會使用 來創建零成本/數量的替代購買DefaultIfEmpty。


然后,該連接的結果將被投影到對象列表中BrandsProfit。


例如,如果某一天沒有購買某個品牌,您會注意到在示例數據列表中,“2”天的品牌“B”被注釋掉了;但在結果中,“2”天仍然存在品牌“B”的行,每日總利潤為零。


void Main()

{

    var purchases = new List<Purchase>() {

        new Purchase() { BrandName = "A", CostOfItem = 1.13M, Day = 1, TotalPurchased = 125 },

        new Purchase() { BrandName = "B", CostOfItem = 1.52M, Day = 1, TotalPurchased = 165 },

        new Purchase() { BrandName = "C", CostOfItem = 1.90M, Day = 1, TotalPurchased = 836 },

        new Purchase() { BrandName = "A", CostOfItem = 1.74M, Day = 2, TotalPurchased = 583 },

        //new Purchase() { BrandName = "B", CostOfItem = 1.52M, Day = 2, TotalPurchased = 785 },

        new Purchase() { BrandName = "C", CostOfItem = 1.42M, Day = 2, TotalPurchased = 369 },

        new Purchase() { BrandName = "A", CostOfItem = 1.93M, Day = 3, TotalPurchased = 789 },

        new Purchase() { BrandName = "B", CostOfItem = 1.87M, Day = 3, TotalPurchased = 739 },

        new Purchase() { BrandName = "C", CostOfItem = 1.78M, Day = 3, TotalPurchased = 436 },

    };


    var results = from day in purchases.Select(x => x.Day).Distinct()

                  from brand in purchases.Select(x => x.BrandName).Distinct()

                  join purchase in purchases on new { Brand = brand, Day = day } equals new { Brand = purchase.BrandName, Day = purchase.Day } into j

                  from result in j.DefaultIfEmpty(new Purchase() { BrandName = brand, Day = day, TotalPurchased = 0, CostOfItem = 0 })

                  select new BrandsProfit()

                  {

                      BrandName = result.BrandName,

                      Day = result.Day,

                      TotalDailyProfit = result.TotalPurchased * result.CostOfItem

                  };


    Debug.WriteLine(JsonConvert.SerializeObject(results, Newtonsoft.Json.Formatting.Indented));

}


class Purchase

{

    public string BrandName { get; set; }

    public int Day { get; set; }

    public int TotalPurchased { get; set; }

    public decimal CostOfItem { get; set; }

}


class BrandsProfit

{

    public string BrandName { get; set; }

    public int Day { get; set; }

    public decimal TotalDailyProfit { get; set; }

}

產生以下結果:-


[

  {

    "BrandName": "A",

    "Day": 1,

    "TotalDailyProfit": 141.25

  },

  {

    "BrandName": "B",

    "Day": 1,

    "TotalDailyProfit": 250.80

  },

  {

    "BrandName": "C",

    "Day": 1,

    "TotalDailyProfit": 1588.40

  },

  {

    "BrandName": "A",

    "Day": 2,

    "TotalDailyProfit": 1014.42

  },

  {

    "BrandName": "B",

    "Day": 2,

    "TotalDailyProfit": 0.0

  },

  {

    "BrandName": "C",

    "Day": 2,

    "TotalDailyProfit": 523.98

  },

  {

    "BrandName": "A",

    "Day": 3,

    "TotalDailyProfit": 1522.77

  },

  {

    "BrandName": "B",

    "Day": 3,

    "TotalDailyProfit": 1381.93

  },

  {

    "BrandName": "C",

    "Day": 3,

    "TotalDailyProfit": 776.08

  }

]

如果您不想繼續使用上面的示例,您可以考慮更新用于生成數據的源查詢,以purchaseQuery使用像上面這樣的外連接...這樣您就會有一個行代表品牌/天的每個組合,即使某個品牌從未在特定日期銷售過。


查看完整回答
反對 回復 2023-08-20
  • 1 回答
  • 0 關注
  • 144 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號