0

我使用 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 实例中,因此仅将数据作为一个表提取并不是一项简单的任务。因此这种方法)

干杯,马特

4

2 回答 2

0

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

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

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

编辑。您还可以通过创建链接服务器并使用 4 个部分名称 [server].[database].[owner].[table] 来创建 SQL 版本

于 2011-10-06T15:09:54.870 回答
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;
于 2011-10-07T09:35:36.080 回答