问题描述
foreach(DataRowdataRowinDataTableAll.Rows){if(int.Parse(dataRow[All.DAYS].ToString())>30){pilla=dataRow[All.NAME].ToString();intdays=int.Parse(dataRow[All.DAYS].ToString());builder.AppendLine(pilla+days+"天");}else{if(dataRow[All.NEW].ToString()=="N"){stringcode=dataRow[All.CODE].ToString();intdays=0;foreach(DataRownewdataRowinDataTableAll.Rows){if(code==newdataRow[All.CODE].ToString()){days+=int.Parse(newdataRow[All.DAYS].ToString());if(days>30){pilla=newdataRow[All.NAME].ToString();builder.AppendLine(pilla+days+"天");}}}}elseif(dataRow[All.NEW_ORDER].ToString()=="Y"){stringcode=dataRow[All.CODE].ToString();intdays=0;foreach(DataRownewdataRowinDataTableAll.Rows){if(code==newdataRow[All.CODE].ToString()){days+=int.Parse(newdataRow[All.DAYS].ToString());if(days>30){pilla=newdataRow[All.NAME].ToString();builder.AppendLine(pilla+days+"天");}}}}}}
现在的问题就是例如在符合条件>30的条件下a物品存入n天保存之后再输入a物品x天这样就最后显示的就会是物品an+x天物品an+x天就是说最后有多少个重复的a物品显示builder.appendline的时候就会重复多少遍应该如何解决这个问题?我只需要显示一遍
解决方案
本帖最后由 starfd 于 2016-01-25 16:12:00 编辑
解决方案二:
能解释下你的业务逻辑吗?为什么要foreach套foreach
解决方案三:
引用1楼starfd的回复:
能解释下你的业务逻辑吗?为什么要foreach套foreach
是这样的因为按照正常的逻辑思维来操作的话是不用foreach套foreach的很简单就能实现了但是因为很多使用者并不能规范操作有很多奇葩的操作方式不能禁止他们不那样操作所以只能在功能上将所有可能奇葩操作都考虑进去来实现这个不能超过30天的功能。我才做码农没多久之前写了两个版本builder.appendline显示倒是没问题但是测出来还是有部分奇葩操作导致超过30天的功能无法卡控住,我不知道还能怎么写今天突然想到了所以就试一试foreach套foreach现在功能上是完全卡住了所有可能有的奇葩操作但是builder.appendline的显示上就有问题了
解决方案四:
引用1楼starfd的回复:
能解释下你的业务逻辑吗?为什么要foreach套foreach
我是先判断首先有没有哪一个物品输入天数的时候直接就超过30天如果为否则判断一下当前输入的这物品是已经保存过的还是新加入的然后套foreach如果所有的物品中还有a物品就把天数全部加起来判断是否超过刚才想了想好像那个elseif是多余的现在直接将第一个else下的那个if(dataRow[All.NEW].ToString()=="N")和if(dataRow[All.NEW].ToString()=="Y")取消掉只留一段
解决方案五:
先去重
解决方案六:
引用4楼FoxDave的回复:
先去重
请问应该怎么先去重?因为我不知道会不会有重复输入的所以才要foreach套foreach将所有重复的物品的天数加起来判断是否会超过
解决方案七:
那你应该先对datatable进行去重。也就是sql数据库,取出数据的时候,已经distinct了。