【问题标题】:How To select Specific Column From DataTable in C#?如何在 C# 中从 DataTable 中选择特定列?
【发布时间】:2019-01-21 16:20:15
【问题描述】:

我有一个有 4 列的数据表, 我想选择一个没有 foreach 或任何其他昂贵循环的列,我的结果必须是一个包含一列的新数据表,我该怎么做;

DataTable leaveTypesPerPersonnel = LeaveGroup.GetLeaveTypesPerPersonnels(dtPersonnel.row);

leaveTypesPerPersonnel 有这些列:

[ID,Guid,LeaveTypeID,Code]

我想要过滤 leaveTypesPerPersonnel 而不使用 foreach 并仅使用 Column [ID] 获取新数据表

注意:输出必须是包含一列的数据表。

【问题讨论】:

标签: c# linq


【解决方案1】:
 leaveTypesPerPersonnel.Columns.Remove("Guid");
 leaveTypesPerPersonnel.Columns.Remove("LeaveTypeID");
 leaveTypesPerPersonnel.Columns.Remove("Code");

 DataTable dt= new DataView(leaveTypesPerPersonnel).ToTable(false,"ID");

【讨论】:

    【解决方案2】:

    您应该能够针对数据表运行快速 LINQ 语句。

    var results = (from item in leaveTypesPerPersonnel
                   select item.ID);
    

    如果我没记错的话,这会给你一个 IEnumerable。它不是 DataTable,但也可以为您的问题提供解决方案。

    【讨论】:

    • 这是一个循环。虽然他在问题中说 ForEach,但我相信他的意思是任何循环。
    • 我相信发帖者的意图是不必为他的数据集的每个循环都做一个新的结构,而不是不能使用在内部使用循环的方法。
    • 这是一个有趣的信念,海报上写着“foreach 或任何其他昂贵的循环”。听起来他或她不想循环。
    【解决方案3】:

    这里尝试一下如何搜索并将结果转换为DataTable

     var dataTable = leaveTypesPerPersonnel.Rows.Cast<DataRow>().ToList().Where(x=> x["ID"] == 21).CopyToDataTable().DefaultView.ToTable(false, "ID");
    

    或者

     var dataTable = leaveTypesPerPersonnel.Select("ID = 21").CopyToDataTable().DefaultView.ToTable(false, "ID");
    

    或者

       var dataTable = leaveTypesPerPersonnel.Rows.Cast<DataRow>().ToList().CopyToDataTable().DefaultView.ToTable(false, "ID");
    

    【讨论】:

    • 这是一个循环。虽然他在问题中说 ForEach,但我相信他的意思是任何循环。
    • 这也只返回一行。海报显然是要一张桌子而不是一排。
    • 我的朋友 CopyToDataTable 返回一个 DataTable,ToTable 也返回一个 DataTable。它由他来指定要返回的行。他可以拥有 DataTable 中的所有行
    • 哈哈哈不,我刚刚添加了第三个或者您可以在没有过滤器的情况下拥有所有行。我没有改变任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2019-03-07
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多