【问题标题】:Get a list of all DBNull cells of a DataTable with Linq使用 Linq 获取 DataTable 的所有 DBNull 单元格的列表
【发布时间】:2015-11-14 10:16:42
【问题描述】:

我想检索 DataTable 的所有 DbNull 单元格的列表。通常我是这样做的:

Private Function IsNotNullViolated(dt As DataTable, ColumnName As String) As Boolean

    Dim IsOk As Boolean = True

    Dim violatingCells =
        dt.AsEnumerable() _
        .Where(Function(i) i.RowState <> DataRowState.Deleted And (IsDBNull(i.Item(ColumnName))))

    For Each violatingCell In violatingCells
        violatingCell.SetColumnError(ColumnName, "Error, Violating Not Null")
        IsOk = False
    Next

    Return Not IsOk

End Function

但现在我不想再传递列名,我想检查整个数据表。如何使用 Linq 实现这一目标?

【问题讨论】:

  • 如果您的数据库架构禁止 NULL 值(因为您的函数已命名),那么您将根本没有任何 DbNull 值。
  • 没错,但这只是出于测试/didaptic/个人好奇心的目的

标签: .net vb.net linq datatable


【解决方案1】:

您可以通过使用Enumerable.Range 遍历所有列索引来扩展您的实现,如下所示:

Dim violatingRows =
    dt.AsEnumerable() _
    .Where(Function(i) i.RowState <> DataRowState.Deleted And (Enumerable.Range(0, dt.Columns.Count).Any(Function(c) IsDBNull(i.Item(c)))))

For Each violatingRow In violatingRows
    For c = 0 To dt.Columns.Count
        If IsDBNull(violatingRow.Item(c)) Then
            violatingRow.SetColumnError(c, "Error, Violating Not Null")
        End If
    Next
    IsOk = False
Next

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 2011-11-06
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2013-05-01
    相关资源
    最近更新 更多