是否可以通过数据集中的相关数据表对数据表中的数据进行排序?

时间:2011-10-06 14:41:54

标签: c# ado.net datatable dataset datarelation

我一直在使用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);
        }

然后使用表“chart”中的一列来排序数据表中“源”表中的数据?

(在有人问之前,这两个表是在不同站点上的SqlServer的单独实例中,因此只需将数据作为一个表拉出来就不是一个简单的任务。因此这种方法)

干杯, 马特

2 个答案:

答案 0 :(得分:0)

这只是创建了一个外键的等价物。你似乎想要相当于INNER JOIN。

除了创建关系之外,还需要将一个列的所有列添加到另一个,循环以填充行和GetParentRows。 MS有一些很好的起点代码:

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

EDIT。您也可以通过创建链接服务器并使用4个部件名称[服务器]来执行SQL版本。[数据库]。[所有者]。[表]

答案 1 :(得分:0)

感谢您的建议,但我发现您可以更轻松地使用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;