C# 在某些条件下如何从datatable中选择all?
我想在某种条件下从我的数据表中选择*并将返回值放在同一个数据表中C# 在某些条件下如何从datatable中选择all?,c#,asp.net,linq,datatable,filtering,C#,Asp.net,Linq,Datatable,Filtering,我想在某种条件下从我的数据表中选择*并将返回值放在同一个数据表中 dt = from myRow in dt.AsEnumerable() where !string.IsNullOrEmpty( myRow.Field<string>("name") ) select ; var rowsToDelete = dt.AsEnumerable() .Where(row => String.IsNullOrEm
dt = from myRow in dt.AsEnumerable()
where !string.IsNullOrEmpty( myRow.Field<string>("name") )
select ;
var rowsToDelete = dt.AsEnumerable()
.Where(row => String.IsNullOrEmpty(row.Field<string>("name"))
.ToList();
foreach(var row in rowsToDelete)
{
dataTable.Rows.Remove(row);
}
我尝试了上面的方法。从代码中可以看出,您希望删除字段名为空的所有行。对吗 返回的结果不是直接返回新的数据表。相反,您将得到一个IEnumerable,其中包含您希望看到的所有行 相反,您可以反转包含您不喜欢的所有内容的linq查询的结果,然后从数据表中删除所有这些内容
dt = from myRow in dt.AsEnumerable()
where !string.IsNullOrEmpty( myRow.Field<string>("name") )
select ;
var rowsToDelete = dt.AsEnumerable()
.Where(row => String.IsNullOrEmpty(row.Field<string>("name"))
.ToList();
foreach(var row in rowsToDelete)
{
dataTable.Rows.Remove(row);
}
从代码中我可以看到,您希望删除字段名为空的所有行。对吗 返回的结果不是直接返回新的数据表。相反,您将得到一个IEnumerable,其中包含您希望看到的所有行 相反,您可以反转包含您不喜欢的所有内容的linq查询的结果,然后从数据表中删除所有这些内容
dt = from myRow in dt.AsEnumerable()
where !string.IsNullOrEmpty( myRow.Field<string>("name") )
select ;
var rowsToDelete = dt.AsEnumerable()
.Where(row => String.IsNullOrEmpty(row.Field<string>("name"))
.ToList();
foreach(var row in rowsToDelete)
{
dataTable.Rows.Remove(row);
}
创建具有非空值的新对象:
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;
});
对现有对象进行更改:
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;
});
创建具有非空值的新对象:
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;
});
对现有对象进行更改:
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;
});
当我执行dt.Rows.Clear时;此行已从表中删除,没有任何数据。BeginEdit将允许在此行中创建新数据。在rowsToDelete@just_name:是的,我没有对它进行测试,这让我感到羞耻,我认为使用.ToList的简单副本可以像处理每个简单列表一样处理数据表。但事实并非如此。所以我只是从我的答案中删除了这个方法,并建议只使用后一种方法;此行已从表中删除,没有任何数据。BeginEdit将允许在此行中创建新数据。在rowsToDelete@just_name:是的,我没有对它进行测试,这让我感到羞耻,我认为使用.ToList的简单副本可以像处理每个简单列表一样处理数据表。但事实并非如此。因此,我只是从我的答案中删除了这个方法,并建议只使用后一种方法。