第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

dataTable 運(yùn)算的問題!路過的大俠幫忙看下吧!

dataTable 運(yùn)算的問題!路過的大俠幫忙看下吧!

收到一只叮咚 2018-12-07 08:44:47
求跟好的思路或者方法解決! 如圖:測(cè)試數(shù)據(jù)源格式 這個(gè)查詢數(shù)據(jù)庫(kù)的已經(jīng)保證了這個(gè)格式? dt列 name相等 那么下一條減去上一條 差 值相加 如果如果差值大于5或者小于0過濾 并且 下一條時(shí)間要大于上一條時(shí)間 比如 name為張三 (4-1)+(78-4) 這樣的格式 但是78-4大于5而已時(shí)間也不對(duì) 過濾 ?(4-1)+(79-78)這樣的格式 最后記錄保存 相關(guān)值 我的代碼實(shí)現(xiàn) DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("csID")); dt.Columns.Add(new DataColumn("Name")); dt.Columns.Add(new DataColumn("value")); dt.Columns.Add(new DataColumn("Time")); DataRow row = dt.NewRow(); row[0] = "1"; row[1] = "張三"; row[2] = "1"; row[3] = DateTime.Now; dt.Rows.Add(row); DataRow row1 = dt.NewRow(); row1[0] = "1"; row1[1] = "張三"; row1[2] = "4"; row1[3] = DateTime.Now.AddDays(1); dt.Rows.Add(row1); DataRow row2 = dt.NewRow(); row2[0] = "1"; row2[1] = "張三"; row2[2] = "78"; row2[3] = DateTime.Now.AddDays(-1); dt.Rows.Add(row2); DataRow row21 = dt.NewRow(); row21[0] = "1"; row21[1] = "張三"; row21[2] = "79"; row21[3] = DateTime.Now.AddDays(2); dt.Rows.Add(row21); DataRow rowt = dt.NewRow(); rowt[0] = "1"; rowt[1] = "張三"; rowt[2] = "80"; rowt[3] = DateTime.Now.AddDays(-5); dt.Rows.Add(rowt); DataRow row3 = dt.NewRow(); row3[0] = "2"; row3[1] = "李四"; row3[2] = "2"; row3[3] = DateTime.Now; dt.Rows.Add(row3); DataRow row4 = dt.NewRow(); row4[0] = "2"; row4[1] = "李四"; row4[2] = "5"; row4[3] = DateTime.Now.AddDays(1); dt.Rows.Add(row4); DataRow d = dt.NewRow(); d[0] = "2"; d[1] = "李四"; d[2] = "5"; d[3] = DateTime.Now.AddDays(-1); dt.Rows.Add(d); DataRow row5 = dt.NewRow(); row5[0] = "3"; row5[1] = "王五"; row5[2] = "3"; row5[3] = DateTime.Now.AddDays(-1); dt.Rows.Add(row5); var sum = 0; var resultDt = new DataTable(); resultDt.Columns.Add("ID"); resultDt.Columns.Add("Name"); resultDt.Columns.Add("starMile"); resultDt.Columns.Add("endMile"); resultDt.Columns.Add("sumMile"); var isFlag = true; var fistMile = ""; for (int i = 0; i < dt.Rows.Count - 1; i++) { var nowValue = dt.Rows[i]["value"].ToString(); var nextValue = dt.Rows[i + 1]["value"].ToString(); if (dt.Rows[i]["Name"] == dt.Rows[i + 1]["Name"]) { //如果下一條時(shí)間小于上一條時(shí)間終止 if (DateTime.Parse(dt.Rows[i + 1]["Time"].ToString()) < DateTime.Parse(dt.Rows[i]["Time"].ToString())) continue; //差值累加 如果大于5 并且小于過濾掉 var tempSum = int.Parse(nextValue) - int.Parse(nowValue); if (tempSum < 5 && tempSum > 0) { //第一次的值 if (fistMile=="") { fistMile = nowValue; } sum += tempSum; isFlag = false; } } //name不相等 并且 isFlag為flase 代表當(dāng)前name相同的有多條(這里過濾王五) if (dt.Rows[i]["Name"] != dt.Rows[i + 1]["Name"]) { if (!isFlag) { resultDt.Rows.Add(dt.Rows[i]["csID"], dt.Rows[i]["Name"], fistMile, nowValue, sum); } fistMile = ""; sum = 0; } } 運(yùn)行結(jié)果: 求優(yōu)化或者 更好的實(shí)現(xiàn)方法 謝謝?
查看完整描述

3 回答

?
翻翻過去那場(chǎng)雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

foreach (var g in dt.Rows.Cast().GroupBy(x => x["Name"])) { int sum = 0; var gList = g.ToList(); if (gList.Count < 2) { continue; } for (var i = 0; i < gList.Count - 1; i++) { if (Convert.ToDateTime(gList[i + 1]["Time"]) < Convert.ToDateTime(gList[i]["Time"])) continue; var x = Convert.ToInt32(gList[i + 1]["value"]) - Convert.ToInt32(gList[i]["value"]); if (x > 0 && x < 5) { sum += x; } } resultDt.Rows.Add(gList[0]["csID"], g.Key, gList[0]["value"], gList[gList.Count - 1]["value"], sum); } ? 還是建議用強(qiáng)實(shí)體。
查看完整回答
反對(duì) 回復(fù) 2018-12-09
?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊

好做法是轉(zhuǎn)成list實(shí)體集合,然后用linq查詢,壞做法是對(duì)datatable做linq查詢
查看完整回答
反對(duì) 回復(fù) 2018-12-09
?
夢(mèng)里花落0921

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊

轉(zhuǎn)化list 循環(huán)的邏輯基本上還是和我一樣的 ? 這樣的話意義不大 嗯 其實(shí)我希望linq 雖然性能會(huì)小點(diǎn) 謝謝你怎么晚 回答我的問題 謝謝
查看完整回答
反對(duì) 回復(fù) 2018-12-09
  • 3 回答
  • 0 關(guān)注
  • 322 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)