【问题标题】:How to copy all the rows in a datatable to a datarow array?如何将数据表中的所有行复制到数据行数组?
【发布时间】:2013-01-27 21:37:05
【问题描述】:

我有两张桌子:

tbl_ClassFac: ClassFacNo(主键) ,教师编号 ,类ID

tbl_EmpClassFac: EmpID,(主键) DateImplement,(主键) ClassFacNo

我想知道特定 ClassFacNo 上的所有员工。 IE。所有具有特定 ClassFacNo 的 EmpID... 我所做的是首先使用用户提供的 EmpID 搜索 tbl_EmpClassFac。我存储这些数据行。然后使用这些数据行中的 ClassFacNo 搜索 tbl_ClassFac。 以下是我的代码。

        empRowsCF = ClassFacDS.Tables["EmpClassFac"].Select("EmpID='" + txt_SearchValueCF.Text + "'");
        int maxempRowsCF = empRowsCF.Length;
        if (maxempRowsCF > 0)
        {
            foundempDT = ClassFacDS.Tables["ClassFac"].Clone();
            foreach (DataRow dRow in empRowsCF)
            {
                returnedRowsCF = ClassFacDS.Tables["ClassFac"].Select("ClassFacNo='" + dRow[2].ToString() + "'");
                foundempDT.ImportRow(returnedRowsCF[0]);
            }
        }
        dataGrid_CF.DataSource = null;
        dataGrid_CF.DataSource = foundempDT.DefaultView;

        ***returnedRowsCF = foundempDT.Rows;*** // so NavigateRecordsCF can be used

        NavigateRecordsCF("F");  // function to display data in textboxes (no importance here)

我知道代码不是很好,但我能想到的只有这些。如果有人有任何建议,请告诉我。如果不告诉我如何将数据表中的所有行复制到数据行数组???

【问题讨论】:

    标签: c# datatable datarow


    【解决方案1】:

    “如何将数据表中的所有行复制到数据行数组中?”

    如果有帮助,请使用不带参数的 Select 的重载

    DataRow[] rows = table.Select();
    

    DataTable.Select()

    获取所有 DataRow 对象的数组。

    根据您的其余问题:实际上并不清楚问题是什么。

    但我假设您想通过第二个(相关)表中的字段值过滤第一个表。你可以使用这个简洁的Linq-To-DataSet查询:

    var rows = from cfrow in tbl_ClassFac.AsEnumerable()
               join ecfRow in tbl_EmpClassFac.AsEnumerable()
               on cfrow.Field<int>("ClassFacNo") equals ecfRow.Field<int>("ClassFacNo")
               where ecfRow.Field<int>("EmpId") == EmpId
               select cfrow;
    // if you want a new DataTable from the filtered tbl_ClassFac-DataRows:
    var tblResult = rows.CopyToDataTable();
    

    请注意,如果数据行序列为空,您可以在CopyToDataTable 处获得异常,因此过滤器不会返回任何行。您可以通过这种方式避免它:

    var tblResult = rows.Any() ? rows.CopyToDataTable() : tbl_ClassFac.Clone(); // empty table with same columns as source table
    

    【讨论】:

    • 示例:我想知道所有拥有/拥有 ClassFacNo 2 的员工你会怎么做???
    • @WaqasAli:编辑了我的答案,向您展示如何使用 Linq-To-DataSetEnumerable.Join 来获得所需的结果。 Join 是高效的,因为它在内部使用哈希表。它从第一个表中获取行,然后仅从第二个表中获取具有匹配键的行,然后仅从第三个表中获取具有匹配键的行,依此类推。
    • 是的,与我得到的结果相同,但更优雅。谢谢一百万。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2015-08-23
    • 1970-01-01
    相关资源
    最近更新 更多