【问题标题】:C#/DataTable - Getting datable first row & last row value base on the column valueC#/DataTable - 根据列值获取数据表的第一行和最后一行值
【发布时间】:2020-12-14 20:47:09
【问题描述】:

我想根据列值获取 DataTable 的第一行和最后一行。

StoreNo   ORNo
1         AAA
2         BBB
1         CCC
2         DDD
1         EEE
2         FFF

我想获得 AAA 和 EEE,因为它是 StoreNo 的第一个也是最后一个 ORNo

这是我的代码:

 for (int i = 0; i < dataTable.Rows.Count; i++)
 {
     if (dataTable.Rows[i]["StoreNo"].ToString().Equals("1"))
        {
            firstID = dataTable.Rows[0]["ORNo"].ToString();
        }
     if (dataTable.Rows[i]["StoreNo"].ToString().Equals("1"))
        {
            lastID = dataTable.Rows[dataTable.Rows.Count - 1]["ORNo"].ToString();
        }
 }

我总是得到 AAA 和 FFF。

谢谢!

【问题讨论】:

  • 你想要dataTable.Rows[i],而不是dataTable.Rows[dataTable.Rows.Count - 1](firstID 相同)。

标签: c# datatable datatables


【解决方案1】:

你可以使用 linq 代替 for 循环,

在开始之前,请确保以下几行位于代码的顶部,

using System;
using System.Collections.Generic;
using System.Linq;

然后试试这段代码,

var list = dataTable.AsEnumerable().Where(row => row["StoreNo"].ToString() == "1");
firstID = list.FirstOrDefault()["ORNo"];
lastID = list.LastOrDefault()["ORNo"];

【讨论】:

  • 请注意:如果没有任何行的 StoreNo=1,您的代码将抛出 NullReferenceException。
  • 感谢您的警告我已将其修复为“1”
  • 我不是这个意思,但是:如果没有一行满足 Where 条件,FirstOrDefault/LastOrDefault 将返回 null。
  • 谢谢@MustafaTarım,但我收到错误The type arguments for method 'DataRowExtensions.Field&lt;T&gt;(DataRow, string)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
【解决方案2】:

我知道它很旧,但无论如何我的 2 美分。

您的代码不起作用,因为您总是分配Rows[0] 和最后一行,而不管StoreNo 中的值如何。请注意,您分配的内容甚至没有使用i。

如果你想要老派的方法,你可以这样做:

for (int i = 0; i < dataTable.Rows.Count; i++)
{
    if (dataTable.Rows[i]["StoreNo"].ToString().Equals("1"))
    {
        if (string.IsNullOrEmpty(firstID))
            lastID = firstID = dataTable.Rows[i]["ORNo"].ToString();
        else
            lastID = dataTable.Rows[i]["ORNo"].ToString();
    }
}

这样,第一个 1 将同时分配(以防它是唯一的外观)。然后,对于每个案例,您都会更新最后一个案例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2015-11-25
    • 2014-09-29
    • 2013-11-24
    • 2014-11-10
    相关资源
    最近更新 更多