我想要做的事情:我有一个很大的数据表,我会查看一个字符串列表,其中一些字符串位于数据表中,而另一些字符串则不存在。我需要列出那些那些,并计算那些不是。 这是我的代码部分:
DataRow[] foundRows;
foundRows = DTgesamt.Select("SAP_NR like '%"+SAP+"%'");
if (AreAllCellsEmpty(foundRows[0]) == false && !(foundRows[0]==null))
{
list.Add(SAP);
}
else
{
notfound++;
}
public static bool AreAllCellsEmpty(DataRow row)
{
if (row == null) throw new ArgumentNullException("row");
for (int i = row.Table.Columns.Count - 1; i >= 0; i--)
{
if (!row.IsNull(i))
{
return false;
}
}
return true;
}
DTgesamt是一个大型DataTable。 " SAP"是一个字符串,位于DataTable的第一列,但不包括所有这些字符串。我想用int" notfound"来计算那些没有用的东西。 问题是,Select在没有找到任何内容时返回一个空的DataRow {System.Data.DataRow [0]}。 我从数组区域中获取了错误消息索引。 if子句中的两个陈述是我在互联网上读到的,但它们不起作用。只有第二个语句,它只是将所有数字添加到列表中,第一个仍然会出现此错误。 感谢您的帮助:))
答案 0 :(得分:3)
检查foundRows
数组中的项目数以避免IndexOutOfRange
例外
foundRows = DTgesamt.Select("SAP_NR like '%"+SAP+"%'");
if (foundRows.Length > 0 && AreAllCellsEmpty(foundRows[0])==false)
list.Add(SAP);
else
notfound++;
答案 1 :(得分:0)
找到的细胞不能为空。你的选择陈述是错误的。所以你真正需要的是:
if (DTgesamt.Select("SAP_NR like '%"+SAP+"%'").Any())
{
list.Add(SAP);
}
else
{
notfound++;
}
根据您拥有的SAP数量以及list
中获得的结果数量,您可以计算错过的记录,甚至可能不需要计数器。
如果您有原始列表或SAP数组,则可以将整个循环缩短为:
var numbersInTable = originalNumbers.Where(sap => DTgesamt.Select("SAP_NR like '%"+sap+"%'").Any()).ToList();
var notFound = originalNumbers.Count - numbersInTable.Count;