Ну, это только для чтения? В .NET 3.5 / C # 3.0 вы, вероятно, могли бы довольно легко использовать соединение LINQ и анонимный тип вывода:
DataTable left = new DataTable
{
Columns = { {"PK", typeof(int)}, {"Name", typeof(string)}},
Rows = {{1,"abc"},{2,"def"}}
}, right = new DataTable
{
Columns = { { "FK", typeof(int) }, { "Value", typeof(decimal) } },
Rows = { { 1, 123.45M }, { 2, 678.9M } }
};
var qry = from x in left.Rows.Cast<DataRow>()
join y in right.Rows.Cast<DataRow>()
on x.Field<int>("PK") equals y.Field<int>("FK")
select new
{
Name = x.Field<string>("Name"),
Value = y.Field<decimal>("Value")
};
var data = qry.ToList();
Затем вы можете привязать «Имя» и «Значение» данных. Обратите внимание, что это проще с типизированными наборами данных, поскольку вы можете потерять мусор Cast<>
и Field<>
.