На самом деле есть способ сделать это, при условии, что отношения между вашими таблицами 1 к 1 (хотя отсутствующие строки не являются большой проблемой): создайте два отношения, а не одно, т.е.
var joinColT1 = table1.Columns["ID"];
var joinColT2 = table2.Columns["FK_IDT1"];
var rel1 = new DataRelation("R1To2", joinColT1, joinColT2, false);
var rel2 = new DataRelation("R2To1", joinColT2, joinColT1, false);
theDataSet.Relations.Add(rel1);
theDataSet.Relations.Add(rel2);
// Add the column you're after
var hisFriend = new DataColumn("HisFriend", typeof(string), "Parent([R2To1]).[HisFriend]");
table1.Columns.Add(hisFriend);
// Add a back-reference to the other table against the friend if you want, too
var hisFriendsSalary = new DataColumn("HisFriendsSalary", typeof(decimal) "Parent([R1To2]).[Salary]");
table2.Columns.Add(hisFriendsSalary);
Тем не менее, пара замечаний: во-первых, когда я впервые экспериментировал с этим, я получил синтаксические ошибки без квадратных скобок вокруг имен отношений в выражении. Хотя это могло быть просто связано с именами, которые я использовал для отношений.
Во-вторых, я считаю, что результат выражений хранится в строках (они не вычисляются «как раз вовремя» при доступе, они вычисляются при изменении значений, а результаты сохраняются). Это означает, что вы сохраняете данные дважды, используя этот подход. Иногда это нормально, а иногда нет.
В-третьих, вы заметите, что я не использую ограничения. Это потому, что в моих типичных случаях использования я не ожидаю, что каждая строка будет иметь аналог в другой таблице (вот почему в первую очередь есть две таблицы, довольно часто!). Это может (я не проверял dotnetframework.org) повлиять на производительность.
person
tobriand
schedule
25.03.2018