Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 连接两个数据表(某些行与某些不匹配)_C#_Linq_Datatable - Fatal编程技术网

C# 连接两个数据表(某些行与某些不匹配)

C# 连接两个数据表(某些行与某些不匹配),c#,linq,datatable,C#,Linq,Datatable,我有两个数据表:T1和T2 T1和T2都有一个列注册,但是T2没有与T1相同的所有行 我必须组合这两个表,如果注册号相同,则从T2获取列,如果不显示为空,但我需要T1中的所有行(如果匹配或不匹配) 我尝试了此操作,但只得到匹配的行: var results = from table1 in T1 join table2 in T2 on (String)table1["Registration"] equals (String)table2

我有两个数据表:T1和T2

T1和T2都有一个列注册,但是T2没有与T1相同的所有行

我必须组合这两个表,如果注册号相同,则从T2获取列,如果不显示为空,但我需要T1中的所有行(如果匹配或不匹配)

我尝试了此操作,但只得到匹配的行:

var results = from table1 in T1
              join table2 in T2
              on (String)table1["Registration"] equals (String)table2["Registration"]
              select new
               {
                 Registration = (String)table1["Registration"],
                 DistanceInKM = (decimal)table1["DistanceInKM"],
                 TotalDistanceTravelledKM = (Double)table2["TotalDistanceTravelledKM"]
                };

您正在执行内部联接,它只显示两侧存在的行

请尝试改用:


您正在执行内部联接,它只显示两侧存在的行

请尝试改用:


如果我有第三个表T3,我必须执行相同的外部连接(‘注册’),这可能吗?如果我有第三个表T3,我必须执行相同的外部连接(‘注册’),这可能吗?
var results = (from table1 in T1.AsEnumerable()
               join tmp in T2.AsEnumerable() on table1["Registration"] equals tmp["Registration"] into grp
               from table2 in grp.DefaultIfEmpty()
               select new
               {
                   Registration = (String)table1["Registration"],
                   DistanceInKM = (decimal)table1["DistanceInKM"],
                   TotalDistanceTravelledKM = (table2 == null ? (double?)null : (Double)table2["TotalDistanceTravelledKM"])
               };