LEFT OUTER JOIN 2个数据表

我试图了解如何查询,最好使用LINQ,2个数据表。 我想对他们进行LEFT OUTER JOIN

带col的Datatable1:[ID] [colA]
带有col的DataTable2:[ID] [ColB] [ColC] …

希望加入该ID。

有人可以给我看一个例子,以便我可以将它应用到我的数据表吗? 先感谢您

根据给出的结果集编译并执行您期望的操作:

// create the default row to be used when no value found var defaultRow = DataTable2.NewRow(); defaultRow[0] = 0; defaultRow[1] = String.Empty; // the query var result = from x in DataTable1.AsEnumerable() join y in DataTable2.AsEnumerable() on (string)x["ID"] equals (string)y["ID"] into DataGroup from row in DataGroup.DefaultIfEmpty(defaultRow) select new {a = x["ColA"], b = (string)row["ColB"]}; 

获得LEFT OUTER Join

你应该尝试使用@Joanna链接。

 from x in DataTable1 join y in DataTable2 on x.ID equals y.ID into DataGroup from item in DataGroup.DefaultIfEmpty(new y.ColB = String.Empty , y.ColC = String.Empty}) select new {x.ColA, item.ColB , item.ColC} 

UPDATE

鉴于您提供的内容,您应该查找LINQ-Dataset文章

这是代码片段

 DataTable DataTable1 = new DataTable(); DataTable DataTable2 = new DataTable(); DataTable1.Columns.Add("ID"); DataTable1.Columns.Add("ColA"); DataTable1.Rows.Add(1, "A"); DataTable1.Rows.Add(2, "B"); DataTable2.Columns.Add("ID"); DataTable2.Columns.Add("ColB"); DataTable2.Rows.Add(1, "B"); var result = from x in DataTable1.AsEnumerable() join y in DataTable2.AsEnumerable() on x["ID"] equals y["ID"] into DataGroup from item in DataGroup.DefaultIfEmpty() select new { ID = x["ID"], ColA = x["ColA"], ColB = item == null ? string.Empty : item["ColB"] }; foreach (var s in result) Console.WriteLine("{0}", s); 

要获得内部联接,请尝试此操作

 from x in Datatable1 join y in Datatable2 on x.ID equals y.ID select new {x.colA, y.ColB, y.ColC }