【问题标题】:How to use Contains using C#如何使用 C# 使用包含
【发布时间】:2015-10-17 09:44:53
【问题描述】:

我有一个带有多列主键的 DataTable

dt.PrimaryKey = new DataColumn[] {dt.Columns["Name"], dt.Columns["Type"] };

现在我想检查我的 DataTable dt 是否包含 (Adarsh, Developer)

我必须在 Contains 方法中传递两个值

我尝试使用以下似乎不起作用的方法

DataRow dr = dt.Rows(e.RowIndex); 
DataRow drNew = dt.NewRow();
drNew["Name"] = dr["Name"];
drNew["Type"] = dr["Type"];
drNew["Address"] = dr["Address"];

if(dt.Rows.Contains(drNew["Name"].ToString(), drNew["Type"].ToString())) //This gives me an error
{
}

提前谢谢你

【问题讨论】:

    标签: c# datatable contains


    【解决方案1】:

    您要使用的 DataRowCollection.Contains 重载只有一个参数:Object[] keys,但您尝试传递两个参数。

    您必须将密钥打包到Object[]

    dt.Rows.Contains(new object[]{first_value, second_value})
    

    如果你觉得它很丑,你可以把它包装成一个简单的扩展方法,像这样:

    public static class Extenstions
    {
        public static bool Contains(this DataRowCollection c, params object[] args)
        {
            return c.Contains(args);
        }
    }
    

    这将使您能够以自己的方式称呼它,例如

    dt.Rows.Contains(first_value, second_value)
    

    【讨论】:

      【解决方案2】:

      你可以试试 Select()。

      DataRow[] result = table.Select("Name = 'foo' and Type = 'bar'");
      

      然后看看结果计数是否大于0。

      【讨论】:

      • Linq 是一个有效的答案,它可能应该更像table.Rows.Any(...)
      【解决方案3】:

      LINQ 更容易实现非常相似的结果

      string name = "Bill";
      bool hasValue = dt.AsEnumerable().Any(row => 'value' == row.Field<String>("Name"));
      

      ..也可以在这里找到一个非常相似的问题 Check if value exists in dataTable?

      【讨论】:

        猜你喜欢
        • 2021-04-05
        • 2018-01-19
        • 2011-08-26
        • 2019-09-27
        • 2021-08-05
        • 2018-10-23
        • 1970-01-01
        • 2014-08-07
        • 1970-01-01
        相关资源
        最近更新 更多