Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 左外联接2个数据表_C#_Linq - Fatal编程技术网

C# 左外联接2个数据表

C# 左外联接2个数据表,c#,linq,C#,Linq,我试图理解如何查询,最好是使用LINQ,2个数据表。 我想在他们身上做一个左外连接 带有列:[ID][colA]的Datatable1 带有列:[ID][ColB][ColC]的DataTable2 我想用那个身份证加入 有人能给我举个例子,这样我就可以把它应用到我的数据表中吗?提前感谢您要获得内部连接,请尝试此 from x in Datatable1 join y in Datatable2 on x.ID equals y.ID select new {x.colA, y.ColB, y.

我试图理解如何查询,最好是使用LINQ,2个数据表。 我想在他们身上做一个左外连接

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

我想用那个身份证加入


有人能给我举个例子,这样我就可以把它应用到我的数据表中吗?提前感谢您

要获得内部连接,请尝试此

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

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

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

要获得
左外部联接

你应该尝试使用@Joanna链接

更新

根据您提供的内容,您应该查找LINQ数据集文章

下面是代码片段

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);

要获得
左外部联接

你应该尝试使用@Joanna链接

更新

根据您提供的内容,您应该查找LINQ数据集文章

下面是代码片段

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);

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

// 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<DataRow>(defaultRow)
    select new {a = x["ColA"], b = (string)row["ColB"]};
//创建在找不到值时使用的默认行
var defaultRow=DataTable2.NewRow();
defaultRow[0]=0;
defaultRow[1]=String.Empty;
//询问
var result=来自DataTable1.AsEnumerable()中的x
在(字符串)x[“ID”]等于(字符串)y[“ID”]的DataTable2.AsEnumerable()中加入y
进入数据组
来自数据组中的行。DefaultIfEmpty(defaultRow)
选择新的{a=x[“ColA”],b=(字符串)行[“ColB”]};

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

// 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<DataRow>(defaultRow)
    select new {a = x["ColA"], b = (string)row["ColB"]};
//创建在找不到值时使用的默认行
var defaultRow=DataTable2.NewRow();
defaultRow[0]=0;
defaultRow[1]=String.Empty;
//询问
var result=来自DataTable1.AsEnumerable()中的x
在(字符串)x[“ID”]等于(字符串)y[“ID”]的DataTable2.AsEnumerable()中加入y
进入数据组
来自数据组中的行。DefaultIfEmpty(defaultRow)
选择新的{a=x[“ColA”],b=(字符串)行[“ColB”]};

你有没有尝试过这个:或者这个甚至:你有没有尝试过这个:或者这个甚至:我想在你的例子和其他人的例子中,让我困惑的部分原因是我没有x.ID。应该有x.ID吗?或者我应该做类似于x.Table.Columns[“ID”]的事情而不是x.ID?我没有X.ID会做错什么?谢谢你的帮助。到目前为止你做了什么?你能告诉我们为什么你没有得到x.ID吗?例如,这里有一段代码,从一开始就试图尽可能地匹配你的x.ID。如果我不使用.AsEnumerable(),那么它会在DataTable1上给我一个错误,说找不到GroupJoin。如果我在搜索datatables时发现的一个示例中添加了AsEnumerable(),那么下一个错误是X.ID,因为没有.ID。我只得到数据行的正常值。再次感谢您的帮助。请参阅更新帖子。您应该参考LINQ数据集,因为有太多特定的LINQ主题。@Turbot-lol,这正是我刚才所做的工作,将一行传递给DefaultIfEmpty,但后来我终于找到了一种方法。我想在您的示例和其他人的示例中,让我困惑的部分是我没有x.ID。应该有x.ID吗?或者我应该做类似于x.Table.Columns[“ID”]的事情而不是x.ID?我没有X.ID会做错什么?谢谢你的帮助。到目前为止你做了什么?你能告诉我们为什么你没有得到x.ID吗?例如,这里有一段代码,从一开始就试图尽可能地匹配你的x.ID。如果我不使用.AsEnumerable(),那么它会在DataTable1上给我一个错误,说找不到GroupJoin。如果我在搜索datatables时发现的一个示例中添加了AsEnumerable(),那么下一个错误是X.ID,因为没有.ID。我只得到数据行的正常值。再次感谢您的帮助。请参阅更新帖子。您应该参考LINQ数据集,因为有太多特定的LINQ主题。@Turbot-lol,这正是我刚才所做的工作,将一行传递给DefaultIfEmpty,但后来我终于找到了一种方法。我想在您的示例和其他人的示例中,让我困惑的部分是我没有x.ID。应该有x.ID吗?或者我应该做类似于x.Table.Columns[“ID”]的事情而不是x.ID?我没有X.ID会做错什么?谢谢你的帮助。问题是:“LEFT OUTER JOIN 2 datatables”我想你的例子和其他人的例子中让我困惑的部分是没有x.ID。应该有x.ID吗?或者我应该做类似于x.Table.Columns[“ID”]的事情而不是x.ID?我没有X.ID会做错什么?谢谢你的帮助。问题是:“LEFT OUTER JOIN 2 datatables”这看起来会起作用,我现在正在尝试。我的程序最初需要一些时间来填充数据库,但一旦完成,我将报告。非常感谢你的帮助!这看起来会起作用,我现在正在尝试。我的程序最初需要一些时间来填充数据库,但一旦完成,我将报告。非常感谢你的帮助!