当前位置:  开发笔记 > 编程语言 > 正文

C#DataRow空检查

如何解决《C#DataRow空检查》经验,为你挑选了4个好方法。

我懂了:

 DataTable dtEntity = CreateDataTable();
 drEntity = dtEntity.NewRow();

然后我将数据添加到行(或不).很多代码,真的不知道行内是否有任何东西.取决于输入(我从一些文件导入).我想做点什么:

 if (drEntity`s EVERY CELL IS NOT EMPTY)
 {
   dtEntity.Rows.Add(drEntity);
 }
 else
 {
   //don't add, will create a new one (drEntity = dtEntity.NewRow();)
 }

有没有一些很好的方法来检查DataRow的每个单元格是否为空?或者我应该预先,并逐一检查它们?



1> Rob..:

一种简单的方法:

bool AreAllColumnsEmpty(DataRow dr)
{
 if (dr == null)
 {
  return true;
 }
 else
 {
  foreach(var value in dr.ItemArray)
  {
    if (value != null)
    {
      return false;
    }
  }
  return true;
 }
}

应该给你你想要的东西,并使它"好"(因为在框架中没有任何我知道的东西),你可以把它作为一个扩展方法包装起来,然后你得到的代码就是:

if (datarow.AreAllColumnsEmpty())
{
}
else
{
}



2> Jack Pines..:

我创建了一个帮助程序(在一个静态类中,我称之为IsEmpty创造性,我知道)IsNullEquivalent,如下所示:

public static bool IsEmpty(this DataRow row)
{
    return row == null || row.ItemArray.All(i => i is DBNull);
}

这里的其他答案都是正确的.我只是觉得我简洁地使用了Linq to Objects.顺便说一句,这与Excel解析结合使用非常有用,因为用户可能会在页面上的一行(数千行)处理,而不考虑它如何影响解析数据.

在同一个类中,我把任何其他我发现有用的帮助器,比如解析器,这样如果字段包含你知道的文本应该是一个数字,你可以流利地解析它.对于任何刚接触这个想法的人来说,这个小小 (SO的任何人,真的吗?不!)

考虑到这一点,这是一个增强版本:

public static bool IsEmpty(this DataRow row)
{
    return row == null || row.ItemArray.All(i => i.IsNullEquivalent());
}

public static bool IsNullEquivalent(this object value)
{
    return value == null
           || value is DBNull
           || string.IsNullOrWhiteSpace(value.ToString());
}

现在你有另一个有用的帮助器,"n/a"它可以在这个上下文中使用,也可以用于任何其他帮助器.您可以扩展它以包含类似的内容,"TBD"或者IsEmpty如果您知道您的数据具有类似的占位符.



3> Thinhbk..:

我更喜欢Tommy Carlier的方法,但稍微改变一下.

foreach (DataColumn column in row.Table.Columns)
    if (!row.IsNull(column))
      return false;

  return true;

我想这种方法看起来更简单明了.



4> Tommy Carlie..:
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;
}

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有