如何使用C# DataTable进行筛选

16

我的数据表;

    dtData

    ID | ID2
    --------
    1  |  2
    1  |  3


dtData.Select("ID = 1"); one more rows;

我想获取行 "ID = 1 And ID2 = 3",该如何实现?

6个回答

33

您是指像这样吗?:

dtData.Select("ID=1 AND ID2=3");

13

好的,这是我处理这类事情的方法...

    GridFieldDAO dao = new GridFieldDAO();
    //Load My DataTable
    DataTable dt = dao.getDT();
    //Get My rows based off selection criteria
    DataRow[] drs = dt.Select("(detailID = 1) AND (detailTypeID = 2)");
    //make a new "results" datatable via clone to keep structure
    DataTable dt2 = dt.Clone();
    //Import the Rows
    foreach (DataRow d in drs)
    {
        dt2.ImportRow(d);
    }
    //Bind to my new DataTable and it will only show rows based off selection 
    //criteria
    myGrid.DataSource = dt2;
    myGrid.DataBind();

注意在我的Select()中,我将条件放在ANDOR之间的括号中。

希望这可以帮助! Mike V


3
比起随处传递DataRow[],这是一个更好的解决方案。如果你的筛选结果返回了0行,并且需要在代码深处使用模式,那么从空数组里获取不到它! - mo.
GridFieldDAO在哪个命名空间中?或者这在WinForms中不可用吗? - PandaNL

6
更好的做法是使用:
GridFieldDAO dao = new GridFieldDAO();
//Load My DataTable
DataTable dt = dao.getDT();
//Get My rows based off selection criteria and copy them directly to datatable
DataTable dt2 = dt.Select("(detailID = 1) AND (detailTypeID = 2)").CopyToDataTable();

CopyToDataTable未定义。我错过了什么吗? - Ciupaz
1
这是一个扩展方法。您必须添加对System.Data.DataSetExtensions的引用。http://msdn.microsoft.com/en-us/library/bb396189(v=vs.110).aspx - qlayer

4
DataTable dt2 = dt.Select("ID = 1").CopyToDataTable;

确保dt中有行数据


2

您可以使用 Linq 的 CopyToDataTable 方法,通过筛选特定行的方式将内容复制到另一个 DataTable。

DataTable dt2 = dt.Select("state = 'FL' ").CopyToDataTable; 

你应该在答案中添加更多细节,向其他人解释为什么这个方法有效。 - pix

0

很好的例子,非常有用。想要补充一件事情 - 如果你需要在字符串上进行选择,请使用类似以下的方法:

DataTable dt2 = dt.Select("state = 'FL' "); 

1
错误:无法隐式将类型“System.Data.DataRow[]”转换为“System.Data.DataTable”。 - kleineg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接