Можно ли упорядочить данные в таблице данных по связанной таблице данных в наборе данных? - PullRequest
0 голосов
/ 06 октября 2011

Я использую 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на отдельных сайтах, поэтому просто вытащить данные из одной таблицы не является простой задачей. Отсюда и такой подход)

Cheers, Matt

Ответы [ 2 ]

0 голосов
/ 07 октября 2011

Спасибо за предложение, но я обнаружил, что вы можете сделать это с помощью 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;
0 голосов
/ 06 октября 2011

Это просто создает эквивалент внешнего ключа. Вы, кажется, хотите эквивалент внутреннего соединения.

В дополнение к созданию отношения требуется добавить все столбцы одного в другой, циклы для заполнения строк и GetParentRows. У MS есть хороший начальный код:

http://support.microsoft.com/kb/326080

EDIT. Вы также можете сделать версию SQL, создав связанный сервер и используя 4 имени части [сервер]. [База данных]. [Владелец]. [Таблица]

...