我有一个名为的数据表,其中包含ID为name,firstname,lastname的数据。另一个数据表包含代码列userID1
,userID2
,userID3
,work。
现在我想要一个新的数据表,它应该包含具有适当数据的数据表的列。
新数据表应包含以下数据:ID
,userfullname1
,userfullname2
,userfullname3
,工作。
在这里,我们通过firstname,datatable1&的姓氏得到userfullname1
的值。 userID1
的{{1}}。同样,我们通过名字获取datatable2
的值, userfullname2
的姓氏& datatable1
&的userID2
等等。
datatable2
中ID的值与 Datatable1
<中的userID1
,userID2
,userID3
相同/强>
最后,我想获得一个包含代码的新数据表,userfullname1,userfullname2,userfullname3,work。但是用户ID在datatable1中。所以,我想通过它们在两个表中存在的ID将Datatable1的名称绑定到Datatable2的所有3个用户ID。
Datatable1:
Datatable2
...
Datatable2:
iD name
1 b
2 d
3 f
4 s
新数据表:
Code userid1 userid2 userid3 work
1f 1 3 6 gg
2g 1 4 7 gg
3b 3 4 7 gg
4v 4 3 8 gg
我如何加入&amp;获取新的数据表?
答案 0 :(得分:2)
听起来你有一个带有用户ID的表,你想加入你的个人资料表来获取这些名字。您可以使用以下子查询执行此操作:
var myTable = UserIds.Select(u => new
{
User1FullName = u.UserProfiles.FirstOrDefault(p => p.UserId == u.userId1).Select(p => p.FirstName + " " + p.LastName),
User2FullName = u.UserProfiles.FirstOrDefault(p => p.UserId == u.userId2).Select(p => p.FirstName + " " + p.LastName)
// etc...
});
您可以使用以下联接来执行此操作:
var myTable = (from u in UserIds
join p1 in UserProfiles on u.UserId1 equals p1.UserId
join p2 in UserProfiles on u.UserId2 equals p2.UserId
// etc...
select new
{
User1FullName = p1.FirstName + " " + p1.LastName,
User2FullName = p2.FirstName + " " + p2.LastName,
// etc...
});
答案 1 :(得分:2)
您可以使用LINQ实现您想要的目标:
DataTable tblResult = new DataTable();
tblResult.Columns.Add("ID");
tblResult.Columns.Add("userfullname1");
tblResult.Columns.Add("userfullname2");
tblResult.Columns.Add("userfullname3");
tblResult.Columns.Add("Work");
var query = from r1 in datatable1.AsEnumerable()
from r2 in datatable2.AsEnumerable()
let id = r1.Field<int>("ID")
let userID1 = r2.Field<int>("userID1")
let userID2 = r2.Field<int>("userID2")
let userID3 = r2.Field<int>("userID3")
where id == userID1 && id == userID2 && id == userID3
select new { r1, r2, id, userID1, userID2, userID3 };
foreach (var x in query)
{
DataRow row = tblResult.Rows.Add();
string firstName = x.r1.Field<string>("firstname");
string lastName = x.r1.Field<string>("lastname");
string userfullname1 = string.Format("{0} {1} {2}", firstName, lastName, x.userID1);
string userfullname2 = string.Format("{0} {1} {2}", firstName, lastName, x.userID2);
string userfullname3 = string.Format("{0} {1} {2}", firstName, lastName, x.userID3);
row.SetField("ID", x.id);
row.SetField("userfullname1", userfullname1);
row.SetField("userfullname2", userfullname2);
row.SetField("userfullname3", userfullname3);
row.SetField("Work", x.r2.Field<string>("Work"));
}
答案 2 :(得分:2)
如果您只想让结果表具有名称和ID,则应该这样做:
DataTable dtResult = new DataTable();
dtResult.Columns.Add("ID", typeof(string));
dtResult.Columns.Add("name", typeof(string));
var result = from datatable1 in table1.AsEnumerable()
join datatable2 in table2.AsEnumerable()
on datatable1.Field<string>("ID") equals datatable2.Field<string>("userID")
select dtResult.LoadDataRow(new object[]
{
datatable1.Field<string>("ID"),
string.Format("{0} {1}" ,datatable1.Field<string>("fname") ,datatable1.Field<string>("lname")),
}, false);
result.CopyToDataTable();