如何通过两个表来创建具有公共值的另一个表

时间:2012-03-15 20:29:42

标签: c# datatable

First Datatable是dt

var dt = new DataTable();
            dt.Columns.Add("ID");
            dt.Columns.Add("First Name");
   dt.Rows.Add(1,"name1");
   dt.Rows.Add(6,"name6");
   dt.Rows.Add(4,"name4");  

第二个表是dt2

var dt2 = new DataTable();
                dt2.Columns.Add("ID");
                dt2.Columns.Add("First Name");
                dt2.Columns.Add("Last Name");
                dt2.Columns.Add("Birthday");

       dt2.Rows.Add(1,"name1", "lastName1", 01.01.1991);
       dt2.Rows.Add(2,"name2", "lastName2", 02.02.1992);
       dt2.Rows.Add(3,"name3", "lastName3", 03.03.1993);
       dt2.Rows.Add(4,"name4", "lastName4", 04.04.1994);
       dt2.Rows.Add(5,"name5", "lastName5", 05.05.1995);
       dt2.Rows.Add(6,"name6", "lastName6", 06.06.1996);

在第三个DataTable dt3中,我想获得ID相同的那些值

结果:

ID   Name   Birthdate
1    name1  01.01.1991
4    name4  04.04.1994
6    name6  06.06.1996

如何在c#中浏览DataTable?

4 个答案:

答案 0 :(得分:1)

写一个SQL QueryStored Procedure,以便加入两个表,如您所描绘的那样。现在使用.Net中的DataTable查询。你会得到你需要的东西。

答案 1 :(得分:1)

不幸的是,没有简单的方法,AFAIK,加入2个表并自动获得第三个表,除非你愿意写一些代码....

您可以先使用Linq加入他们:

var common = from c in dt.AsEnumerable()
             join x in dt2.AsEnumerable() on c.Field<string>("ID") equals x.Field<string>("ID")
             select new object[] { c["ID"],c["First Name"], x["Birthday"] };

现在您可以使用所需的架构创建目标表:

DataTable dt3 = new DataTable();
dt3.Columns.Add("ID");
dt3.Columns.Add("Name");
dt3.Columns.Add("Birthdate");
foreach (var item in common)
   dt3.LoadDataRow(item.ToArray(),true);

答案 2 :(得分:0)

您是将它们添加到具有已定义架构的实际数据库中,还是只是尝试在内存中执行此操作?如果是内存,我会将这些添加到DataSet中,然后您可以使用它来过滤数据集中的条件,您可以定义它们之间的关系。

答案 3 :(得分:-1)

您可能正在寻找在表格之间添加关系。请检查此link

我猜你需要DataTables在同一个DataSet中(你可以将DataTables添加到DataSet中)。