Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在某些条件下如何从datatable中选择all?_C#_Asp.net_Linq_Datatable_Filtering - Fatal编程技术网

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的简单副本可以像处理每个简单列表一样处理数据表。但事实并非如此。因此,我只是从我的答案中删除了这个方法,并建议只使用后一种方法。