【问题标题】:Get all values of a column from a DataSet从 DataSet 中获取列的所有值
【发布时间】:2013-07-11 21:58:21
【问题描述】:

在 C# 中,是否可以通过简单指令(无 LINQ,无 For cicle)从 DataSet 的所有行中获取特定列的所有值?

【问题讨论】:

    标签: c# dataset


    【解决方案1】:

    为什么没有 LINQ?对于没有相同限制的人来说,这里有三种方法可以做到这一点,下面两种都使用 LINQ。

    C#

    List<object> colValues = new List<object>();
    
    //for loop
    foreach (DataRow row in dt.Rows) {
        colValues.Add(row["ColumnName"]);
    }
    
    //LINQ Query Syntax
    colValues = (from DataRow row in dt.Rows select row["ColumnName"]).ToList();
    
    //LINQ Method Syntax
    colValues = dt.AsEnumerable().Select(r => r["ColumnName"]).ToList();
    

    VB

    Dim colValues As New List(Of Object)
    
    'for loop
    For Each row As DataRow In dt.Rows
        colValues.Add(row("ColumnName"))
    Next
    
    'LINQ Query Syntax
    colValues = (From row As DataRow In dt.Rows Select row("ColumnName")).ToList
    
    'LINQ Method Syntax
    colValues = dt.Rows.AsEnumerable.Select(Function(r) r("ColumnName")).ToList
    

    要在DataTable 上使用AsEnumerable 方法,您必须拥有对添加LINQ extension methods 的System.Data.DataSetExtensions 的引用。否则,您可以将DataTableRows 属性转换为DataRow 类型(您不必使用查询语法执行此操作,因为它会自动为您转换)。

    【讨论】:

    • 我无法在过时的 .NET Compact Framework 应用程序中使用 LINQ。但您的回答可能对其他人有用。
    【解决方案2】:

    仅通过迭代行,如Utaal noted in this answer

    您可能期望DataTable.DefaultView.RowFilter 支持分组,但它不支持(它主要提供与Where 子句等效的功能,并带有一些基本的聚合——尽管不是简单的分组)。

    【讨论】:

      【解决方案3】:

      据我所知,没有直接的方法可以得到这些;但是 for 循环非常简单,显然不会比其他任何东西更耗费资源。

      【讨论】:

      • 我就是这么想的。我希望这可能是一种方法。谢谢。
      【解决方案4】:

      除了 Utaal 的回答之外,您还可以使用从原始数据源中仅选择一列的查询结果填充一个新的 DataTable 对象,假设它是一个 RDBMS。这样做的好处是可以让您指定在代码中易于表达但在 SQL 中易于表达的内容,例如 DISTINCT 查询。

      【讨论】:

        猜你喜欢
        • 2019-05-16
        • 1970-01-01
        • 2011-12-07
        • 2012-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-12
        • 1970-01-01
        相关资源
        最近更新 更多