155.C# LINQ Join操作 c# linq原理

155.C# LINQ Join操作 c# linq原理

编码文章call10242024-12-25 10:36:3328A+A-

摘要


这个就对应着SQL的Join,连接多个表的操作

正文


运算符

描述

C#查询表达式语法

Join

运算符连接两个序列匹配键的基础

join … in … on … equals …

一个例子

定义基础类

class Hero
{
    public int HeroNo { get; set; }
    public string Name { get; set; }

    public int Age { get; set; }

    public Hero(string name, int age, int heroNo)
    {
        Name = name;
        Age = age;
        HeroNo = heroNo;
    }
}

class Army
{
    public int HeroNo { get; set; }
    public int ArmyNo { get; set; }
    public int Qty { get; set; }
}

初使化List

List<Hero> heroes = new List<Hero>
{
    new Hero("张飞",38,100),
    new Hero("刘备",40,101),
    new Hero("关羽",39,102),
    new Hero("曹操",45,103),
    new Hero("孙权",31,104)
};

List<Army> armies = new List<Army>
{
    new Army(){ArmyNo=1,HeroNo=100,Qty=10000},
    new Army(){ArmyNo=2,HeroNo=100,Qty=30000},
    new Army(){ArmyNo=3,HeroNo=101,Qty=40000},
    new Army(){ArmyNo=4,HeroNo=102,Qty=45000},
    new Army(){ArmyNo=5,HeroNo=103,Qty=18000},
    new Army(){ArmyNo=6,HeroNo=103,Qty=80000},
};

内联

var ret = from h in heroes
          join a in armies on h.HeroNo equals a.HeroNo
          select new
          {
              Name = h.Name,
              ArmyNo = a.ArmyNo,
              Qty = a.Qty
          };

foreach (var item in ret)
{
    lstMain.Items.Add(item.Name + " " + item.ArmyNo + " " + item.Qty);
}

左联

var ret = from h in heroes
          join a in armies on h.HeroNo equals a.HeroNo into t
          from a in t.DefaultIfEmpty()
          select new
          {
              Name = h.Name,
              ArmyNo = a == null ? 0 : a.ArmyNo,
              Qty = a == null ? 0 : a.Qty
          };

foreach (var item in ret)
{
    lstMain.Items.Add(item.Name + " " + item.ArmyNo + " " + item.Qty);
}
点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4