我希望在某些条件下从我的数据表中Select *
并将返回值放在相同的数据表中。
dt = from myRow in dt.AsEnumerable()
where !string.IsNullOrEmpty( myRow.Field<string>("name") )
select ;
我尝试上面的东西。
答案 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;
});