21

嗨,我如何使用 linq 过滤数据表到数据表?我有一个 DropDownList,在那里我可以选择 Modul 列的值。现在我想用这个 Modul Column 过滤 DataTable。

这是我的数据表结构:

User | Host | TimeDiff | License | Telefon | Modul 

这里的代码:

protected void drp_Modules_SelectedIndexChanged(object sender, EventArgs e)
{
    string value = drp_Modules.SelectedValue;

    DataTable tb = (DataTable)Session["dt_Users"];

    tb = from item in tb //?????

    LoadUsertable(tb);
}
4

3 回答 3

48

您最好使用DataTable.Select方法,但如果您必须使用 LINQ,那么您可以尝试:

DataTable selectedTable = tb.AsEnumerable()
                            .Where(r => r.Field<string>("Modul") == value)
                            .CopyToDataTable();

这将创建一个DataTable基于过滤值的新值。

如果你使用DataTable.Select

string expression = "Modul =" + value;
DataRow[] selectedRows = tb.Select(expression);
于 2013-10-18T12:31:11.730 回答
2

您可以在强制转换之前使用条件来检查是否存在另外的行。Any() 需要 System.Linq 命名空间才能工作

var rows = values.AsEnumerable().Where
            (row => row.Field<string>("Status") == action);//get the rows where the status is equal to action

if(rows.Any())
{
    DataTable dt = rows.CopyToDataTable<DataRow>();//Copying the rows into the DataTable as DataRow
}
于 2017-06-14T08:16:47.423 回答
1

根据过滤项目列表检索数据表。(即,如果数据表中存在任何列表项,则将收到匹配的结果。

 List<string>item=new List<string>(){"TG1","TG2"};     
 DataTable tbsplit = (from a in tbl.AsEnumerable()
              where item.Any(x => a.Field<string>("CSubset").ToUpper().Contains(x.ToUpper()))
              select a).CopyToDataTable();//By Executing this, the Filter DataTable is obtained
于 2020-01-23T12:28:53.877 回答