有一個帶有訂單資料表的 ASP.NET MVC 應用程式,該表包含訂單部件 ID 和訂單數量。
所以不知何故,以前的開發人員將 Order Qty 設定為字串型別。
現在對于報告,我想根據相同的 Part Id 獲得 Qty 的總和并顯示它,但它不起作用。
你能幫我解決這個問題嗎?
foreach(var item in rData) {
try {
if (db.OrderTable.Any(u => u.PartNo_Id == item.Id)) {
item.TotalOrderQty = db.OrderTable.Where(x => x.PartNo_Id == item.Id).Sum(x => x.OrderQty);
}
} catch (Exception ex) {
throw ex;
}
}
錯誤cannot implicitly convert type 'string' to 'long'在(x=>x.OrderQty)
uj5u.com熱心網友回復:
如果您的db物件是真實資料庫的 OR-Mapper,那么您正在進行許多可以優化的查詢,這會導致您首先詢問串列中的每個專案,如果資料可用,然后嘗試查詢這些資訊。一次性請求資料(如果不是數百萬行)并在客戶端計算總和會更有效。
也許這個草圖可以幫助你:
// Define matching Ids to read from database
var idsToSearch = rData.Select(item => item.Id);
var matchingOrders = db.OrderTable
// Define criteria, which data has to be fetch.
.Join(idsToSearch, order => order.PartNo_Id, id => id, (order, id) => order)
// Prepare data on the server side to be already being grouped.
.GroupBy(order => order.PartNo_Id)
// Load data from the server to the client
.AsEnumerable()
// Parse and summarize the data on the client side.
.Select(group => (group.Key, group.SelectMany(order => int.Parse(order.OrderQty).Sum())
.ToList();
根據您的模型,如果表包含很多(在此請求中不需要)列,則.Join()在呼叫和呼叫之間洗掉真正需要的資料可能是有意義的。.GroupBy()另請注意,此代碼未經測驗,可能包含一些愚蠢的錯字或類似內容,但它應該為您提供如何解決問題的良好起點。
更新(在服務器端將字串轉換為 int)
感謝 Panagiotis 的注釋,EF 支持轉換方法并將它們轉換為相應的 SQL 方法。由于這個事實,一切都可以在服務器端完成。這可能看起來像這樣:
var matchingOrders = db.OrderTable
.Join(idsToSearch, order => order.PartNo_Id, id => id, (order, id) => order)
.GroupBy(order => order.PartNo_Id)
.Select(group => (group.Key, group.SelectMany(order => Convert.ToInt32(order.OrderQty).Sum())
.ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/456524.html
標籤:C# 网 asp.net-mvc
上一篇:HTML提交按鈕在按下時隱藏
