我有一个字符串,我需要检查DataTable dtPs.Rows中的任何列“item_manuf_id”是否等于某个值
我可以循环遍历所有行并进行比较
String id = dtPs.Rows[number]["item_manuf_id"].ToString()
if ("some value".equals(id)) etc.
但我想知道是否有办法检查DataTable
是否包含记录
答案 0 :(得分:16)
像这样的东西
string find = "item_manuf_id = 'some value'";
DataRow[] foundRows = table.Select(find);
答案 1 :(得分:4)
如果item_manuf_id
是主键,请使用Find方法:
var result = dtPs.Rows.Find("some value");
如果您只想知道该值是否在那里,请使用Contains方法。
if (dtPs.Rows.Contains("some value"))
{
...
}
主键限制适用于Contains
。
答案 2 :(得分:4)
您可以遍历DataTable
的每一行并检查值。
在使用IEnumerable
时,我非常喜欢使用 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
时使用一个示例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"] };
定义主键并填充数据后,可以使用查找(...)方法获取与主键匹配的行。
查看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
}
最后,您可以使用选择()方法查找位于http://msdn.microsoft.com/en-us/library/y06xa2h1(v=vs.80).aspx的DataTable
内的数据。
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
}
答案 3 :(得分:2)
我认为如果你的“item_manuf_id”是DataTable的主键,你可以使用Find方法......
string s = "stringValue";
DataRow foundRow = dtPs.Rows.Find(s);
if(foundRow != null) {
//You have it ...
}