如何使用 Linq 过滤数据表到数据表?

Posted

技术标签:

【中文标题】如何使用 Linq 过滤数据表到数据表?【英文标题】:How I can filter a dataTable with Linq to datatable? 【发布时间】:2013-10-27 06:49:58 【问题描述】:

嗨,我如何使用 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);

【问题讨论】:

请参考msdn.microsoft.com/en-us/library/bb669073.aspx 使用LINQ重要吗? 可以在DataTable上使用Select()方法 查看this 使用 Linq 查询 DataTable 【参考方案1】:

你最好使用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);

【讨论】:

我知道我参加这个派对有点晚了,但是谢谢,这对我正在做的事情有很大帮助。 @Habib,只是一个简单的评论。谢谢!!!当我找到你的答案时,我正在试图投射行等,等等,等等。 ***.com/questions/35507109/… 我有多列或单列。我该怎么做?谢谢。【参考方案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

【讨论】:

【参考方案3】:

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

 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

【讨论】:

以上是关于如何使用 Linq 过滤数据表到数据表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LINQ 过滤字典并将其返回到相同类型的字典

使用 Linq 表达式进行 C# 动态数据库过滤

如何在 LINQ C# 中仅过滤 2 列分组中的最后一个值

如何使用linq c#优化嵌套循环并从另一个列表中过滤

如何使用条件过滤字典值列表

如何使用 Linq 根据另一个列表过滤列表?