【问题标题】:All rows of specific column in dataset数据集中特定列的所有行
【发布时间】:2013-04-30 07:34:19
【问题描述】:

我有一个如下所示的数据集:

| A | B | C | D | E | F | G | H | I | ... |   Z  |
--------------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... |  26  |
|11 |22 |33 |44 |55 |66 |77 |88 |99 | ... | 2626 |
|111|222|333|444|555|666|777|888|999| ... |262626|

不相关。我只有 很多 列。

我想浏览特定列的所有行
是否有可能不经过所有列?因为现在我唯一能想到的就是这个(假设我想要 D 列的所有行)

C#

foreach(DataRow row in myDataSet.Tables(0).Rows)
   if(row.Column == myDataSet.Tables(0).Columns("D"))
      MessageBox.Show("I'm in Column B");

VB

For Each row As DataRow In myDataSet.Tables(0).Rows
If row.Column Is myDataSet.Tables(0).Columns("D") Then
MessageBox.Show("I'm in Column B")
End If
Next

但这会遍历所有列。我想使用像
myDataSet.Tables(0).Columns("D").Rows 这样的集合,但它不存在。

【问题讨论】:

    标签: c# vb.net dataset datarow


    【解决方案1】:

    DataRow 有一个 indexer 可以使用:

    foreach(DataRow row in myDataSet.Tables[0].Rows)
        Console.WriteLine("I'm in Column B: " + row["D"]);
    

    您可以通过该字段的nameordinal-index 访问它。如果您有DataColumn 的引用并且在找到该列后被其他人使用,则可以使用third overload。如果您不想“搜索”列(尽管努力可以忽略不计),请使用:

    DataColumn col = myDataSet.Tables[0].Columns["D"];
    foreach(DataRow row in myDataSet.Tables[0].Rows)
            Console.WriteLine("I'm in Column B: " + row[col]);
    

    但您也可以使用 Linq,例如,如果您想对该列中的所有值求和:

    int dTotal = myDataSet.Tables[0].AsEnumerable().Sum(r => r.Field<int>("D"));
    

    【讨论】:

    • 谢谢蒂姆。但这仍然会通过我的数据库中的所有行来查看它是否属于Column B。所以性能是一样的。除非我错了。
    • 我也知道这种方法,但不幸的是 LINQ 不是这里的选项。 (Vb.Net 2.0 工作环境):-( !
    • @PhaDaPhunk:编辑了我的答案。
    • 当你看到它时很明显......再次感谢
    【解决方案2】:

    在虚构的网格中,您可以垂直滚动行并水平访问列

    foreach(DataRow row in myDataSet.Tables(0).Rows)
    {
       // At this point the row iterator point to a row 
       // where all the values in the schema columns are available
       // Indexing with the column name will result in related value 
       MessageBox.Show(row["D"].ToString();
    }
    

    【讨论】:

    • 这是否会像我的第一种方法一样消耗资源,因为它仍然需要检查 所有行 以查看它是否符合 row["D"]criteria ?
    • 您的标准是什么?修改从数据库返回值的查询可以获得最佳性能,但您可以使用 DataTable.Select 方法仅提取所需的行
    • 我忘记了我的问题中没有上下文。我在一列中有一个字段,该字段被, 分成两种语言。所以我想测试它是法语还是英语,并保留部分列字段。但在一个完美的设计中,我想这应该在我的查询中完成吧?
    • 现在清楚一点了。可能您可以在数据库级别使用 LIKE 运算符仅返回包含特定子字符串的行,或者,如果数据库允许,拆分字符串并使用某种存储过程进行检查。否则我认为你没有任何可能获得所有结果集并通过代码工作。
    • @Steve: row["D"] 将导致索引器搜索名称为 D 的列。这就是OP想要避免的。您需要使用DataColumn 重载。
    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 2014-09-07
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2018-09-23
    相关资源
    最近更新 更多