Можно ли упорядочить данные в таблице данных по связанной таблице данных в наборе данных?

#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;