如何使用 C# 使用包含

Posted

技术标签:

【中文标题】如何使用 C# 使用包含【英文标题】:How to use Contains using 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


提前谢谢你

【问题讨论】:

【参考方案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?

【讨论】:

以上是关于如何使用 C# 使用包含的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 合并包含所有者密码的 PDF 文档

如何使用 C# 验证字符串不包含 HTML

如何使用 C# 从 DataSet 创建包含多个工作表的 excel 文件

如何在 C# 中隐藏包含用户控件的表单?

如何将包含数百张工作表的 excel 文件导入数据库以在 C# 项目中使用?

如何使用 Newtonsoft.Json 将包含数组数组的 json 对象解析为 C# 中的对象列表?