在下面的代码中我想比较两个数据集列的值,但是它不匹配,那么这个条件也是真的。那么如何真正比较呢?
if (dsEmp.Tables[0].Columns["EmpName"].ToString() == dsAllTables.Tables[2].Columns["EmpName"].ToString())
{
}
答案 0 :(得分:2)
您正在比较两个列名,因此"EmpName"
与"EmpName"
始终为真。 Tables[0].Columns["EmpName"]
会返回名称为DataColumn
的{{1}},ToString
会返回"EmpName"
列的名称。所以这毫无意义。
如果您想知道两个表中是否有一个行包含相同的EmpName
值,您可以使用LINQ:
var empRowsEmpName = dsEmp.Tables[0].AsEnumerable().Select(r => r.Field<string>("EmpName"));
var allRowsEmpName = dsAllTables.Tables[2].AsEnumerable().Select(r => r.Field<string>("EmpName"));
IEnumerable<string> allIntersectingEmpNames = empRowsEmpName.Intersect(allRowsEmpName);
if (allIntersectingEmpNames.Any())
{
}
现在您甚至知道两个表中包含哪些EmpName
值。您可以使用foreach
- 循环:
foreach(string empName in allIntersectingEmpNames)
Console.WriteLine(empName);
如果您想知道两者中是否包含特定值:
bool containsName = allIntersectingEmpNames.Contains("SampleName");
如果您只想获得第一个匹配项:
string firstIntersectingEmpName = allIntersectingEmpNames.FirstOrDefault();
if(firstIntersectingEmpName != null){
// yes, there was at least one EmpName that was in both tables
}
答案 1 :(得分:1)
如果你有一行,这应该有效:
if (dsEmp.Tables[0].Row[0]["EmpName"].ToString() == dsAllTables.Tables[2].rows[0]["EmpName"].ToString())
{
}
对于多行,您必须遍历表:
for (int i = 0; i <= dsEmp.Tables[0].Rows.Count; i++)
{
for (int j = 0; j <= dsAllTables.Tables[0].Rows.Count; j++)
{
if (dsEmp.Tables[0].Rows[i]["EmpName"].ToString() == dsAllTables.Tables[2].Rows[j]["EmpName"].ToString())
{
}
}
}