在我的项目中,有两个数据集dsNames
和dsDetails
。
我不了解SQL。这里我连接到XML和Textfiles。
dtNames
EmployeeName EmployeeRole
a 2
b 3
c 4
dtDetails
Empid EmployeeName EmpCity EmployeeRole
101 a abc 3 //EmpRole not equal to above table EmpRole
102 b abc 3
103 c xyz 4
104 d pqr 5
105 e rst 6
我希望根据EmployeeName
和EmployeeRole
(此处与dsNames
进行比较)将这两个数据集关联起来,并将结果存储在另一个DataSet dsMain
中(来自{ {1}})然后根据dsDetails
和matchedDataTable
之类的比较划分两个数据集。
我知道这可以使用DataRelation或RowFilter完成,但我无法想到如何做到这一点,因为有两列要与其他数据表两列进行比较,我不知道。(我是初学者.net)
我尝试了以下代码:(无法正常工作)
unmatchedDataTable
我在上面的代码中做错了,看起来我并没有以正确的方式做到这一点。
请不要linq,因为我知道但我不能在我的项目中使用它。
请协助。
答案 0 :(得分:1)
您可以使用LINQ,只需加入两个表即可。只有EmpName
一次,两列一次。
var sameRoleNames = from rn in dtNames.AsEnumerable()
join rd in dtDetails.AsEnumerable()
on new
{
Name = rn.Field<string>("EmpName"),
Role = rn.Field<string>("EmpRole"),
} equals new
{
Name = rd.Field<string>("EmpName"),
Role = rd.Field<string>("EmpRole"),
}
select rd;
var notSameRoleNames = from rn in dtNames.AsEnumerable()
join rd in dtDetails.AsEnumerable()
on rn.Field<string>("EmpName") equals rd.Field<string>("EmpName")
where rn.Field<string>("EmpRole") != rd.Field<string>("EmpRole")
select rd;
var matchedDataTable = sameRoleNames.CopyToDataTable();
var unmatchedDataTable = notSameRoleNames.CopyToDataTable();
我刚才看到你对“你能使用Linq”问题的回答。无论如何,我把它留在那里,也许这对其他人有帮助。
答案 1 :(得分:0)
我使用Select
属性
DataRow[] matchedRows = dtNames.Select("EmployeeName = '" + dsDetails.Tables[0].Columns[0].ToString() + "'"
+ " AND " + " EmployeeRole ='" + dsDetails.Tables[0].Columns[1].ToString() + "'");
//
DataRow[] mismatchedRows = dsDetails.Tables[0].Select("EmployeeName <> '" + dtNames.Columns[0].ToString() + "'"
+ " OR" + " EmployeeRole <>'" + dtNames.Columns[1].ToString() + "'");