如何从数据行数组中删除数据行?
How do I delete a datarow from a datarow array?
我正在遍历一组数据行,当某个特定的随机项无效时,我想删除该项并获取新的总数以获取另一个随机项。
但是当我删除一个数据行时,数据行不会消失......是的,可能有更好的方法来做到这一点,但我不够聪明,无法做到这一点..
我没有删除行,而是在里面看到了这个
ItemArray = podLps[1].ItemArray
引发了 System.Data.RowNotInTableException
类型的异常
//PHASE 1: Get all LPs in the pod and add to collection
List<DataRow> allLps = dtLp.AsEnumerable().ToList();
DataRow[] podLps = allLps.Where(x => x.ItemArray[0].ToString() == loPod).ToArray();
//PHASE 2: Pick a random LP from collection that has valid WAVE1
for (int i = podLps.Count(); i > 0; i--)
{
//Recount items in collection since one may have been removed
int randomIndex = random.Next(podLps.Count());
var randomLpUserId = podLps[randomIndex].ItemArray[1].ToString();
var randomLpWave1 = int.Parse(podLps[randomIndex].ItemArray[2].ToString());
//Get WAVE1 # for selected LP
lpNumberOfLoans = GetNumberOfLoans(session, randomLpUserId);
//check if LP has valid WAVE1 then use this person
if (randomLpWave1 > lpNumberOfLoans)
{
return randomLpUserId;
}
else
{
podLps[randomIndex].Delete();
}
}
最简单的方法是将 DataRow[]
的数组转换为列表,调用 RemoveAt
然后将列表转换回数组:
var dest = new List<>(podLps);
dest.RemoveAt(randomIndex);
podLps = dest.ToArray();
我建议为 podLps 使用列表而不是数组。
然后你可以像 Jaco 提到的那样使用 .RemoveAt(不适用于数组)。
DataRow.Delete() 只是标记要在下次更新 DataTable 时删除的行。
看看这个例子,它应该为您指出删除行的正确方向我刚刚测试了它并且它有效
for (int i = myDataTable.Rows.Count - 1; i >= 0; i--)
{
DataRow row = myDataTable.Rows[i]; //Remove
if (myDataTable.Rows[i][0].ToString() == string.Empty)
{
myDataTable.Rows.Remove(row);
}
}
我正在遍历一组数据行,当某个特定的随机项无效时,我想删除该项并获取新的总数以获取另一个随机项。 但是当我删除一个数据行时,数据行不会消失......是的,可能有更好的方法来做到这一点,但我不够聪明,无法做到这一点..
我没有删除行,而是在里面看到了这个
ItemArray = podLps[1].ItemArray
引发了 System.Data.RowNotInTableException
//PHASE 1: Get all LPs in the pod and add to collection
List<DataRow> allLps = dtLp.AsEnumerable().ToList();
DataRow[] podLps = allLps.Where(x => x.ItemArray[0].ToString() == loPod).ToArray();
//PHASE 2: Pick a random LP from collection that has valid WAVE1
for (int i = podLps.Count(); i > 0; i--)
{
//Recount items in collection since one may have been removed
int randomIndex = random.Next(podLps.Count());
var randomLpUserId = podLps[randomIndex].ItemArray[1].ToString();
var randomLpWave1 = int.Parse(podLps[randomIndex].ItemArray[2].ToString());
//Get WAVE1 # for selected LP
lpNumberOfLoans = GetNumberOfLoans(session, randomLpUserId);
//check if LP has valid WAVE1 then use this person
if (randomLpWave1 > lpNumberOfLoans)
{
return randomLpUserId;
}
else
{
podLps[randomIndex].Delete();
}
}
最简单的方法是将 DataRow[]
的数组转换为列表,调用 RemoveAt
然后将列表转换回数组:
var dest = new List<>(podLps);
dest.RemoveAt(randomIndex);
podLps = dest.ToArray();
我建议为 podLps 使用列表而不是数组。 然后你可以像 Jaco 提到的那样使用 .RemoveAt(不适用于数组)。
DataRow.Delete() 只是标记要在下次更新 DataTable 时删除的行。
看看这个例子,它应该为您指出删除行的正确方向我刚刚测试了它并且它有效
for (int i = myDataTable.Rows.Count - 1; i >= 0; i--)
{
DataRow row = myDataTable.Rows[i]; //Remove
if (myDataTable.Rows[i][0].ToString() == string.Empty)
{
myDataTable.Rows.Remove(row);
}
}