如何使用 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# 从 DataSet 创建包含多个工作表的 excel 文件