您如何使用linq过滤数据表到数据表? 我有一个DropDownList,我可以选择模块列的值。现在我想用这个模块列过滤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);
}
答案 0 :(得分:38)
您最好使用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);
答案 1 :(得分:1)
在投射之前,您可以使用条件来检查存在的行。 Any.Linq名称空间是Any()工作所必需的
var rows = values.AsEnumerable().Where
(row => row.Field<string>("Status") == action);
if(rows.Any()){
DataTable dt = rows.CopyToDataTable<DataRow>();
}
答案 2 :(得分:0)
要基于过滤项目列表来检索数据表。(即,如果数据表中存在任何列表项,则将收到匹配的结果。
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