#c# #ado.net #datatable #dataset #datarelation
#c# #ado.net #datatable #набор данных #привязка данных
Вопрос:
Я так долго использую ORM, что, похоже, забыл большинство своих базовых навыков обработки данных в dotnet: (
Возможно ли сделать что-то подобное?
DataSet ds = new DataSet();
var compiledConnection = new SqlConnection(cDbConnectionString);
SqlDataAdapter daChart = new SqlDataAdapter("select * from Chart", compiledConnection);
daChart.Fill(ds, "chart");
if (ds.Tables["chart"].Rows.Count > 0)
{
var sourceConnection = new SqlConnection(sourceDbConnectionString);
SqlDataAdapter daSource = new SqlDataAdapter("select * from source", sourceConnection);
daSource.Fill(ds, "source");
DataRelation chart_source = new DataRelation("dr", ds.Tables["chart"].Columns["intItemId"],
ds.Tables["source"].Columns["intRowId"], false);
ds.Relations.Add(chart_source);
}
А затем используйте один из столбцов в таблице «диаграмма», чтобы упорядочить данные в таблице «источник» по отношению к данным?
(Прежде чем кто-либо спросит, эти две таблицы находятся в отдельных экземплярах SQLServer на отдельных сайтах, поэтому простое извлечение данных в виде одной таблицы не является простой задачей. Отсюда и такой подход)
Приветствия, Мэтт
Ответ №1:
Это просто создает эквивалент внешнего ключа. Похоже, вам нужен эквивалент ВНУТРЕННЕГО СОЕДИНЕНИЯ.
В дополнение к созданию связи требуется добавить все столбцы одного в другой, циклы для заполнения строк и getparentrow . У MS есть хороший исходный код:
http://support.microsoft.com/kb/326080
Редактировать. Вы также можете создать версию SQL, создав связанный сервер и используя 4 имени частей [server].[база данных].[владелец].[таблица]
Ответ №2:
Спасибо за предложение, но я обнаружил, что вы можете сделать это с помощью LINQ гораздо проще:
DataTable source = ds.Tables["source"];
DataTable chart = ds.Tables["chart"];
var joinedTable =
from s in source.AsEnumerable()
join c in chart.AsEnumerable()
on s.Field<Int64>("intRowId") equals
c.Field<Int64>("intItemId")
select new
{
intRowId = s.Field<Int64>("intRowID"),
strTitle = s.Field<string>("strTitle"),
intWeight = c.Field<Int64>("intWeight")
};
var sortedTable = from j in joinedTable
orderby j.intWeight descending
select j;