【问题标题】:Check if String / Record exists in DataTable检查数据表中是否存在字符串/记录
【发布时间】:2012-08-14 21:31:52
【问题描述】:

我有一个字符串,我需要检查 DataTable dtPs.Rows 中的任何列“item_manuf_id”是否等于某个值

我可以遍历所有行并进行比较

String id = dtPs.Rows[number]["item_manuf_id"].ToString()
if ("some value".equals(id)) etc.

但我想知道是否有任何方法可以检查 DataTable 是否包含记录

【问题讨论】:

  • 冒着听起来多余的风险,我假设 OP 正在寻找一种解决方案,以确保 constant 时间复杂度而不是 linear,这似乎成为公认的答案所提供的。

标签: c# datatable


【解决方案1】:

像这样的

 string find = "item_manuf_id = 'some value'";
 DataRow[] foundRows = table.Select(find);

【讨论】:

  • 很好的解决方案。作为旁注,请允许我建议使用方括号的通用查询格式,以防您的列名包含空格(即使这并不直接适用于 OP 的问题):string find = string.Format("[{0}] = '{1}'", columnName, valueToFind);
【解决方案2】:

如果item_manuf_id 是主键,则使用Find 方法:

var result = dtPs.Rows.Find("some value");

如果您只想知道该值是否在其中,请使用Contains 方法。

if (dtPs.Rows.Contains("some value"))
{
  ...
}

主键限制也适用于Contains

【讨论】:

    【解决方案3】:

    您可以遍历DataTable 的每一行并检查其值。

    我非常喜欢在使用 IEnumerables 时使用 foreach 循环。使查看或处理每一行变得非常简单和干净

    DataTable dtPs = // ... initialize your DataTable
    foreach (DataRow dr in dtPs.Rows)
    {
        if (dr["item_manuf_id"].ToString() == "some value")
        {
            // do your deed
        }
    }
    

    或者,您可以将PrimaryKey 用于您的DataTable。这有多种帮助,但您通常需要先定义一个,然后才能使用它。

    http://msdn.microsoft.com/en-us/library/z24kefs8(v=vs.80).aspx使用 if 的示例

    DataTable workTable = new DataTable("Customers");
    
    // set constraints on the primary key
    DataColumn workCol = workTable.Columns.Add("CustID", typeof(Int32));
    workCol.AllowDBNull = false;
    workCol.Unique = true;
    
    workTable.Columns.Add("CustLName", typeof(String));
    workTable.Columns.Add("CustFName", typeof(String));
    workTable.Columns.Add("Purchases", typeof(Double));
    
    // set primary key
    workTable.PrimaryKey = new DataColumn[] { workTable.Columns["CustID"] };
    

    定义主键并填充数据后,您可以使用 Find(...) 方法获取与主键匹配的行。

    看看http://msdn.microsoft.com/en-us/library/y06xa2h1(v=vs.80).aspx

    DataRow drFound = dtPs.Rows.Find("some value");
    if (drFound["item_manuf_id"].ToString() == "some value")
    {
        // do your deed
    }
    

    最后,您可以使用 Select() 方法在DataTable 中查找数据,该地址也位于http://msdn.microsoft.com/en-us/library/y06xa2h1(v=vs.80).aspx

    String sExpression = "item_manuf_id == 'some value'";
    DataRow[] drFound;
    drFound = dtPs.Select(sExpression);
    
    foreach (DataRow dr in drFound)
    {
        // do you deed. Each record here was already found to match your criteria
    }
    

    【讨论】:

    • 我正试图摆脱这个
    【解决方案4】:

    我认为如果您的“item_manuf_id”是 DataTable 的主键,您可以使用 Find 方法 ...

    string s = "stringValue";
    DataRow foundRow = dtPs.Rows.Find(s);
    if(foundRow != null) {
     //You have it ...
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 2013-08-07
      • 2018-10-21
      相关资源
      最近更新 更多