如何在某些条件下从数据表中选择全部?

时间:2012-01-24 12:53:19

标签: c# asp.net linq datatable filtering

我希望在某些条件下从我的数据表中Select *并将返回值放在相同的数据表中。

 dt = from myRow in dt.AsEnumerable()
      where !string.IsNullOrEmpty( myRow.Field<string>("name") )
      select ;

我尝试上面的东西。

2 个答案:

答案 0 :(得分:3)

我可以从您的代码中看到,您希望删除字段“Name”为空的所有行。这是对的吗?

您获得的结果不是您的新数据表。相反,您将获得包含您想要查看的所有行的IEnumerable<DataRow>

相反,您可以反转包含您不喜欢的所有内容的linq查询的结果,然后只需从数据表中删除所有这些内容。

var rowsToDelete = dt.AsEnumerable()
                     .Where(row => String.IsNullOrEmpty(row.Field<string>("name"))
                     .ToList();

foreach(var row in rowsToDelete)
{
    dataTable.Rows.Remove(row);
}

答案 1 :(得分:1)

创建一个具有非空值的新对象:

DataTable dt2 = new DataTable();
dt.AsEnumerable().Where(row => !row.IsNull("name")).Select(row => { dt2.Rows.Add(row); return true; });

从现有对象中删除空值:

dt.AsEnumerable().Where(row => row.IsNull("name")).Select((row, index) => { dt.Rows.RemoveAt(index); return true; });

更改现有对象:

dt.AsEnumerable().Where(row => row.IsNull("name")).Select((row, index) =>
{
    System.Diagnostics.Debug.WriteLine("Name in Row # " + index + " is null.");
    row["Status"] = "Disabled";
    return true;
});