Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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# 如何按列值筛选数据表?_C#_Asp.net_Filter_Datatable_Adapter - Fatal编程技术网

C# 如何按列值筛选数据表?

C# 如何按列值筛选数据表?,c#,asp.net,filter,datatable,adapter,C#,Asp.net,Filter,Datatable,Adapter,我有一个关于数据表的问题。我从数据库中检索一个DataTable,其中一列包含1或0。现在我只想检索该列中值为1的行 列的名称为ACTIVATE 这是我的数据表: DataTable table = new DataTable(TABLE); //How can I filter here so ACTIVATE == 1? adapter.Fill(table); connection.Open(); selectcommand.ExecuteReader(); return tab

我有一个关于数据表的问题。我从数据库中检索一个
DataTable
,其中一列包含1或0。现在我只想检索该列中值为1的行

列的名称为
ACTIVATE

这是我的
数据表

DataTable table = new DataTable(TABLE);

//How can I filter here so ACTIVATE == 1?

adapter.Fill(table);

connection.Open();

selectcommand.ExecuteReader();

return table;
您只需这样使用:

 foundRows = table.Select("ACTIVATE = '1'");
它返回一个DataRow对象数组

DataTable results = table.Select("ACTIVATE = 1").CopyToDataTable();
这应该可以实现您想要的,基本上您可以像SQL一样查询数据表。

通过SQL(首选)

通过
Linq到数据表
(内存中):

除此之外,您不需要
selectcommand.ExecuteReader()
来填充表格

DataTable table = new Datatable();
using(var con = new SqlConnection(connectionString))
using(var cmd = new SqlCommand("SELECT * FROM dbo.Table WHERE ACTIVATE = 1", con))
using(var da = new SqlDataAdapter(cmd))
{
    da.Fill( table );
}

您不是在使用查询来填充数据表吗??在该查询中使用where条件对于查询中的逻辑,传递null以返回带有参数where(@filter is null或ACTIVATE=@filter)的all。添加一个Datatable.Select()筛选器,此答案将完成。:)@萨米斯。拉索尔:为什么?Linq功能更强大,强类型
字段
方法也支持空值,是更好的选择(如果可用)。编辑:然而,你是对的。相应地编辑了我的答案。+1当然,我刚才说了,所以要在一个答案中涵盖所有选项。Datatable.Select非常慢,特别是在有大量records@AntonioBakula不知道…thanxx,我今天学到了一些新东西。。!!这个答案必须被接受。
DataTable tblFiltered = table.AsEnumerable()
                             .Where(r => r.Field<int>("ACTIVATE") == 1)
                             .CopyToDataTable();
DataRow[] filteredRows = table.Select("ACTIVATE = 1");
DataTable table = new Datatable();
using(var con = new SqlConnection(connectionString))
using(var cmd = new SqlCommand("SELECT * FROM dbo.Table WHERE ACTIVATE = 1", con))
using(var da = new SqlDataAdapter(cmd))
{
    da.Fill( table );
}
return table;
DataTable results = table.Select("ACTIVATE = 1").CopyToDataTable();