在下面的代碼中,我想比較兩個數據集列的值,但它不匹配,那麼也獲得這個條件true.so如何真正比較?如何比較C#中的兩個DataSet列值?
if (dsEmp.Tables[0].Columns["EmpName"].ToString() == dsAllTables.Tables[2].Columns["EmpName"].ToString())
{
}
在下面的代碼中,我想比較兩個數據集列的值,但它不匹配,那麼也獲得這個條件true.so如何真正比較?如何比較C#中的兩個DataSet列值?
if (dsEmp.Tables[0].Columns["EmpName"].ToString() == dsAllTables.Tables[2].Columns["EmpName"].ToString())
{
}
你比較兩個列名,所以"EmpName"
與"EmpName"
這總是如此。 Tables[0].Columns["EmpName"]
返回帶有該名稱的DataColumn
,ToString
返回該列的名稱,即"EmpName"
。所以這沒有意義。
如果你不是想知道,如果兩個表包含在他們的行LINQ的,你可以使用一個相同的EmpName
值:
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
-loop:
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
}
哇,它的偉大工作..很多than.m M.r Tim Schmelter。但這是爲了兩者都是平等的條件,那麼如何採取不平等的條件? –
@dawoodabbas:所有'EmpName'都在第一個表中,但不在第二個?你可以使用'empRowsEmpName.Except(allRowsEmpName)',反之亦然。 –
錯誤運算符'&&'不能應用於'bool'類型的操作數和'System.Collections.Generic.IEnumerable
如果你有一個單列,這應該工作:
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())
{
}
}
}
你看過調試模式嗎?你正確地使用字符串,我沒有看到代碼本身存在問題。 –
我們不知道這些數據是什麼......如果您能提供一個簡短但完整的程序來展示問題,它將會*真的*有幫助。這也不清楚你的意思是「但它不匹配,然後也得到這個條件」。 –
試試這個http://stackoverflow.com/a/27637300/4513879 –