如何比较C#中的两个DataSet列值?

时间:2015-05-08 11:15:54

标签: c#

在下面的代码中我想比较两个数据集列的值,但是它不匹配,那么这个条件也是真的。那么如何真正比较呢?

if (dsEmp.Tables[0].Columns["EmpName"].ToString() == dsAllTables.Tables[2].Columns["EmpName"].ToString())
{

}

2 个答案:

答案 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())
        {

        }
    }
}