Join和GroupJoin的区别数据库
List<Atable> ainfo = new List<Atable> { new Atable{ AId=1, AName="A1", AAge="11" }, new Atable{ AId=2, AName="A2", AAge="12"}, new Atable{ AId=3, AName="A3",AAge="13"} }; List<Btable> binfo = new List<Btable>() { new Btable{ BId=1, BName="B1", BAge="81" }, new Btable{ BId=3, BName="B3", BAge="83"}, new Btable{ BId=5, BName="B5",BAge="85"} };
Join编程
官方释义:基于匹配键对两个序列的元素进行关联。使用默认的相等比较器对键进行比较。spa
这个与数据库中的INNER JOIN很相似,就是使用一个键(TKey)将两个集合关联起来,并对这两个集合的元素进行选择,做为结果输出。code
var info = ainfo.Join(binfo, //须要链接的数据源 a => a.AId, b => b.BId, (a, b) => new { a.AName, b.BName }); //获取本身定义类型的集合。 foreach (var item in info) { Console.WriteLine(item.AName + item.BName); }
GroupJoinblog
官方释义: 基于键相等对两个序列的元素进行关联并对结果进行分组。使用默认的相等比较器对键进行比较。it
这个与数据库的LEFT OUTER JOIN很相似。与Join的区别就是:GroupJoin内resultSelector的输入参数从TInner单个元素编程IEnumerable<TInner>元素集合,其余保持不变。用法与Join差很少,它也是基于TOuter.TKey及TInner.TKey的链接。table
var info = ainfo.GroupJoin(binfo, //须要链接的数据源 Atable => Atable.AId, //经过AId指定数据源 Btable => Btable.BId, //经过BId指定数据源 (a, b) => new { a.AName, binfos = b }//建立结果相同的数据 ).ToList(); foreach (var item in info) { foreach (var b in item.binfos) { Console.WriteLine(item.AName + "\t" + b.BName); } }