public DataTable ReverseOrder(DataTable dTable, string colName)
{
foreach (DataRow drow in dTable.Rows)
{
if (hTable.Contains(drow[colName]))
duplicateList.Add(drow);
else
hTable.Add(drow[colName], string.Empty);
}
}
我想以反向(降序)顺序开始每个循环。
答案 0 :(得分:3)
您可以使用Enumerable.Reverse
(如果这是您想要的):
public DataTable ReverseOrder(DataTable dTable, string colName)
{
return dTable.AsEnumerable().Reverse().CopyToDataTable();
}
答案 1 :(得分:2)
试试这个
List<DataRow> rows = dTable.AsEnumerable().Reverse().ToList();
foreach (DataRow drow in rows)
{
if (hTable.Contains(drow[colName]))
duplicateList.Add(drow);
else
hTable.Add(drow[colName], string.Empty);
}
答案 2 :(得分:1)
对于(;;;)这样的情况来说很方便。我相信foreach不会工作。即使它工作,你需要很多解决方法。所以考虑for()循环的时间,因为它适用于索引。
在你的情况下
int count = dTable.Rows.Count;
for(int i=count-1;i<=0;i--)
{
//logic
}
答案 3 :(得分:0)
通过分析您的代码,看起来您最简单的答案是使用中间列表从foreach循环中收集结果,将其反转,然后将反向列表添加到“htable”中。 Foreach不能反向运行(尽管可以使用反向迭代的for循环)。
代码看起来像这样:
public DataTable ReverseOrder(DataTable dTable, string colName)
{
List<DataRow> intermediateDuplicateList = new List<DataRow>();
List<DataRow> intermediateHTableAddList = new List<DataRow>();
foreach (DataRow drow in dTable.Rows)
{
if (hTable.Contains(drow[colName]))
intermediateDuplicateList.Add(drow);
else
intermediateHTableAddList.Add(drow);
}
intermediateDuplicateList.Reverse();
intermediateHTableAddList.Reverse();
//appending the reversed list to dupelist.
duplicateList.AddRange(intermediateDuplicateList);
//iterating through a reversed list adding to hTable;
foreach (DataRow d in intermediateHTableAddList)
{
hTable.Add(drow[colName], string.Empty);
}
}
答案 4 :(得分:0)
使用For-Next循环,For-Each不能反向运行:
Function ArraySum(Numbers As Variant)
Summed = 0
For Number = (Numbers.Rows.Count - 1) To 0 Step -1
Summed = Summed + Numbers.Cells(Number + 1, 1)
Next Number
ArraySum = Summed
End Function