我一直在使用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的单独实例中,因此只需将数据作为一个表拉出来就不是一个简单的任务。因此这种方法)
干杯, 马特
答案 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;