首页 > 编程语言 >C# 实现FULL JOIN 效果

C# 实现FULL JOIN 效果

时间:2023-11-24 12:14:22浏览次数:33  
标签:FULL JOIN C# Value itemB Value2 Key var new

参考:https://dotnettutorials.net/lesson/full-outer-join-in-linq/
思路就是先left join 再right join,最后union

namespace Test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建测试数据
            var listA = new List<ItemA>
        {
            new ItemA { Key = 1, Value = "A1" },
            new ItemA { Key = 2, Value = "A2" },
            new ItemA { Key = 3, Value = "A3" }
        };

            var listB = new List<ItemB>
        {
            new ItemB { Key = 1, Value2 = "B1" },
            new ItemB { Key = 2, Value2 = "B2" },
            // Comment or uncomment the following line to test with a null entry
            new ItemB { Key = 4, Value2 = "B4" }
        };

            // 执行 full join
            var leftJoinQuery = from itemA in listA
                                join itemB in listB
                                on itemA.Key equals itemB.Key into gj
                                from subItemB in gj.DefaultIfEmpty()
                                select new { Key = itemA.Key, ValueA = itemA.Value, ValueB = (subItemB == null) ? default : subItemB.Value2 };

            var rightJoinQuery = from itemB in listB
                                join itemA in listA
                                on itemB.Key equals itemA.Key into gj
                                from subItemA in gj.DefaultIfEmpty()
                                select new { Key = itemB.Key, ValueA =(subItemA == null)?default: subItemA.Value, ValueB = itemB.Value2 };
            var fullJoinQuery= leftJoinQuery.Union(rightJoinQuery);
            // 输出结果
            foreach (var result in fullJoinQuery)
            {
                Console.WriteLine($"Key: {result.Key}, ValueA: {result.ValueA}, Value2: {result.ValueB}");
            }
        }
    }


    // 测试模型
    class ItemA
    {
        public int Key { get; set; }
        public string Value { get; set; }
    }

    class ItemB
    {
        public int Key { get; set; }
        public string Value2 { get; set; }
    }
}

  结果

 

标签:FULL,JOIN,C#,Value,itemB,Value2,Key,var,new
From: https://www.cnblogs.com/cvol/p/17853434.html

相关文章

  • mysql5.0升级8.0完成后,服务器重启引发"#1449 - The user specified as a definer ('m
    遇到的问题:问题一:ERROR1449(HY000):Theuserspecifiedasadefiner('mysql.infoschema'@'localhost')doesnotexist异常原因:未知解决办法:验证指定的用户('mysql.infoschema'@'localhost')是否存在于mysql数据库中SELECTUserFROMmysql.userWH......
  • Centos系统udp丢包&内核参数优化
    echo0>/proc/irq/31/smp_affinity_listecho1>/proc/irq/33/smp_affinity_list这两个命令是用于设置Linux中中断处理程序的亲和性,以提高系统的性能和稳定性。在Linux系统中,系统中断(IRQ)是由硬件触发的,它们通常被用于处理来自硬件设备的请求(例如,网络接口卡、磁盘控制器......
  • CF1864D 题解
    我们注意到对如图倒三角形上的所有点操作都会影响到目标点。那么我们可以维护两个前缀和,第一个前缀和表示如下的点是否操作第二个前缀和表示这些点是否操作这样我们求出了前缀和之后,将两个前缀和异或一下就知道该点是否要操作了。#include<bits/stdc++.h>usingnamespace......
  • Excel导入sql语句模板,解决转换时间戳问题
    EXCEL导入MySQL生成sql语句解决时间戳问题生成普通sql语句解决时间戳问题这里使用’"&TEXT(E1,“yyyy-mm-ddhh:mm:ss”)&"’解决excel表中时间戳问题的生成使用str_to_date(’"&TEXT(E1,“yyyy-mm-ddhh:mm:ss”)&"’,’%Y-%m-%d%T’))解决插入mysql中的问题="insertintoxx......
  • java.sql.SQLException: ORA-02289: 序列不存在
    --CreatesequencecreatesequenceLOG_IDminvalue1maxvalue9999999999999999999999999999startwith1incrementby1cache20;如果检查没问题的话,不妨试试上面的代码,就是sequenceLog_ID未创建,希望能有所帮助!......
  • java.lang.IllegalArgumentException: Invalid uri......---------: Invalid query解
    报的错误信息:java.lang.IllegalArgumentException:Invaliduri'http://127.0.0.1:12000/GetList?txt_stratTime=2020-07-20&txt_endTime=2020-07-26&txt_fzr=&txt_bgr=&txt_jbr=中文信息&SortExpression=ASSIGNEE&SortDirection=desc':Invalidq......
  • BigDecimal加减乘(cheng)除BigDecimal[]数组比较大小
     文章目录前言一、Bigdecimal是什么?二、使用步骤总结 前言提示:BigDecimal在使用的过程中尽量采用String类型的参数进行转换尽量避免不使用字符串的数字对小数点进行数据格式的转换,避免出现精准问题。加法:add()函数减法:subtract()函数乘法:multiply()函数除法:divide()函数绝对值......
  • CQ 社区版 V2.6.0 发布 | SQL闪回、权限看板、新增数据源人大金仓等
    HELLO,大家好,又到了CloudQuery社区版发版时间!本次更新版本为v2.6.0,亮点多多,我们直入主题一起来看!本期亮点新增3种数据源支持V2.6.0,新增三种国产数据源支持:人大金仓(forOracle/PG)(8.6.0)、Gbase(3.3.0.2)、神州通用(7.0.8),对这些数据源支持权限管控、数据保护、审计分析等。目前V2.6......
  • Tomcat报错Pailed to start component [StandardEngine[CatalinalStandardHost[localh
    话不多说直接上图就完了就下边这个错困扰了我一两个小时,到现在说实话我也没找到到底是什么原因,就是之前的一个版本war包还可以在tomcat上边运行但是最近更新的war包就不行就会报一个这个错,我看到网上有人说是tomcat的问题,我看其他war包都能正常使用我就没想到会是这个问题但最终的......
  • 解决updateByPrimaryKeySelective()因为对象数据是null而更新失败
    解决updateByPrimaryKeySelective()因为对象数据是null而更新失败解决:Couldnotsetparametersformapping:ParameterMapping遇到这个问题需要去model类中确定一下主键id找到自己实体类中的主键加上@Id或者在生成代码得时候在数据库编辑添加主键步骤一步骤二希望能帮到你......