2

在我的情况下,我正在传递一个 sql 查询并获取数据集中的数据,但是当我尝试获取 ParentId 列包含 NULL 的行时会出现问题。这是一段代码。

   DataSet ds = GetDataSet("Select ProductId,ProductName,ParentId from ProductTable");

   //ds is not blank and it has 2 rows in which ParentId is NULL

   DataRow[] Rows = ds.Tables[0].Select("ParentId IS NULL");

但我仍然没有得到任何行。需要帮忙。谢谢。

4

6 回答 6

12

使用也支持可空类型的强类型DataRow扩展方法:Field

IEnumerable<DataRow> rows = ds.Tables[0].AsEnumerable()
    .Where(r => !r.Field<int?>("ParentId").HasValue);

请注意,我使用Enumerable.Where的是 Linq 扩展方法来过滤表。

如果你想要一个数组使用ToArray,如果你想要一个新的DataTable使用CopyToDataTable。如果您只是想枚举结果,请使用foreach.

foreach(DataRow row in rows)
{
    // ...
}
于 2013-03-20T12:47:30.727 回答
4
var rowsWithoutParent = dt.AsEnumerable().Where(r => r["ParentId"] == null);

var rowsWithParent = dt.AsEnumerable().Where(r => r["ParentId"] != null);
于 2013-03-20T12:51:25.747 回答
2
var rows = ds.Tables[0].AsEnumerable()
    .Where(r => r.IsNull("ParentId"));
于 2013-10-08T12:11:52.280 回答
0

查看

ds.Tables.Count

然后

ds.Tables[0].Rows.Count
于 2013-03-20T12:47:37.617 回答
0

您可以像这样访问这些项目:

 String value = ds.Tables[0].Rows[RowNum][ColNum].ToString();
于 2013-03-20T12:48:42.030 回答
0

为我工作:

   DataTable newDt = dt.AsEnumerable().Where(r => r["column name"] == DBNull.Value).CopyToDataTable();

如果等于null不工作,因为是返回DBNull

于 2018-02-01T11:14:45.113 回答