您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

用不匹配的数据在C#中联接两个DataTable

用不匹配的数据在C#中联接两个DataTable

您要在LEFT JOIN概念上进行操作(这是OUTER JOIN,而不是INNER JOIN)。

表A和B的左外部联接(或简称为左联接)的结果始终包含“左”表(A)的所有记录,即使联接条件未在“右”表中找到任何匹配的记录(B)。

来源:http//zh.wikipedia.org/wiki/Join_(sql)#Left_outer_join

杰夫·阿特伍德(Jeff Atwood)也对不同的连接发表了不错的视觉解释

在LINQ中,这样做比sql笨拙得多,类似于:

var LeftJoin = from user in Users
join chat in Chats
on user.Name equals user.Name into JoinedTables
from row in JoinedTables.DefaultIfEmpty()
select new                          
{
  Name,
  AgentStatus,
  TimeInState,
  TaskHandled,
  Region,
  CChats = chat != null ? chat.CChats : 0
  AChats = chat != null ? chat.AChats : 0                          
};

来源:http//codingsense.wordpress.com/2009/03/08/left-join-right-join- using-linq/

当然,加入Name并不是理想的选择- 希望您实际上ID在现实世界中拥有一个,或者真的可以保证名称都是唯一的并且将被一致地提供(例如,没有尾随空格或大小写差异)。

//编辑,处理更新的代码示例

试试这个:

var result = from table1 in dt1.AsEnumerable()
             join table2 in dt2.AsEnumerable() 
             on (string)table1["Name"] equals (string)table2["Name"]
             into joinedDt
             from table2 in joinedDt.DefaultIfEmpty()
             select new
             {
                 Name = (string)table1["Name"],
                 Status = (string)table1["Status"],
                 Time = (double)table1["Time"],
                 Calls = (double)table1["Calls"],
                 Region = (string)table1["Region"],
                 CChats = (table2 != null ? (double)table2["CChats"] : 0)
             };
c# 2022/1/1 18:53:02 有351人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶