我有一个包含两个表的DataSet。一个被认为是嵌套在另一个..所有我想要的是它不是嵌套而且有一个表。 .Merge()和LINQ就是不行。
以下是主要表格的示例
student-id ID
--------------------
123456789 1
654987321 2
但是每个都有多行,它们在下一个表中对应
ID Col1 Col2 等
----------------------
1事实1事实2
1事实3事实4
2事实5事实6
我想将它们组合起来,看起来像这样...
student-id Col1 Col2
-------------------------------
123456789事实1事实2
123456789事实3事实4
654987321 fact5 fact6
每次我尝试合并它都不起作用我得到一个错误,我不能复制主键是“ID”,因为合并是基于主键(我相信)我不能删除它。
我不能使用LINQ,因为我想使这个通用,以便第二个表可以有任意数量的列,我不能让选择工作。
更新:我的解决方案 我最终将第二个表克隆到一个新的数据表。然后添加一个名为“student-id”的列并删除ID列。我遍历主表查找的行并将它们与第二个表中的行相关联...组合数组中的所有数据并在最终表中创建一行。
答案 0 :(得分:0)
听起来你需要的是一个Pivot表。
这基本上允许您以您想要的方式显示数据。
以下是一些教程/项目
http://www.codeproject.com/Articles/25167/Simple-Advanced-Pivots-with-C-and-ASP-NET http://www.codeproject.com/Articles/46486/Pivoting-DataTable-Simplified
<强>更新强>
你可能会发现自己更好地做着“转动”。部分在MS SQL中作为存储过程,然后使用调用此存储过程的结果填充数据表。这个例子是一个很好的起点
http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx
答案 1 :(得分:0)
LINQ并不像你建议的那么糟糕。您可以使用包含两个DataRows的匿名类型:
var result = from t1 in table1.AsEnumerable()
join t2 in table2.AsEnumerable() on (int)t1["ID"] equals (int)t2["ID"]
select new
{
Student = t1,
Facts = t2
};
foreach(var s in result)
Console.WriteLine("{0} {1} {2}", s.Student["student-id"], s.Facts["Col1"], s.Facts["Col2"]);
这样,您就不会在输出中包含特定列,因此您可以在事后查看它们。
话虽如此,另一张海报建议使用数据透视表可能是一个更好的方向。
答案 2 :(得分:0)
让我们在SQL中尝试。
设,第1表=表1和第2表=表2
SQL:
Select
X.student-id,Y.Col1,Y.Col2
From Table1 As X Inner Join Table2 As Y On Y.ID=X.ID
我认为如果你在SQL中尝试它很容易做到!!!