C#中的LINQ(Language Integrated Query)提供了一种声明式的编程模式,用于操作数据。它允许你用类似SQL的方式查询和操作数据,不论这些数据来自于数据库、XML文档还是内存中的集合。Join操作是LINQ中的一个重要特性,它允许你将两个数据源中的数据基于共同的键值对进行匹配并合并。
运算符 | 描述 | C#查询表达式语法 |
---|---|---|
Join | 运算符连接两个序列匹配键的基础 | join … in … on … equals … |
一个例子
定义基础类
C#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
C#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},
};
内联
C#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);
}
左联
C#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);
}
本文作者:rick
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!