国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中使用Join與GroupJoin將兩個集合進行關聯與分組

2020-01-24 00:23:55
字體:
來源:轉載
供稿:網友

本文使用的開發環境是VS2017及dotNet4.0,寫此隨筆的目的是給自己及新開發人員作為參考,

對于Join的用法說明如下:

語法:

public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>( this IEnumerable<TOuter> outer, IEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector, Func<TInner, TKey> innerKeySelector, Func<TOuter, TInner, TResult> resultSelector)

參數說明:

outerType: System.Collections.Generic.IEnumerable<TOuter>要聯接的第一個序列。innerType: System.Collections.Generic.IEnumerable<TInner>要與第一個序列聯接的序列。outerKeySelectorType: System.Func<TOuter, TKey>用于從第一個序列的每個元素提取聯接鍵的函數。innerKeySelectorType: System.Func<TInner, TKey>用于從第二個序列的每個元素提取聯接鍵的函數。resultSelectorType: System.Func<TOuter, TInner, TResult>用于從兩個匹配元素創建結果元素的函數。返回值Type: System.Collections.Generic.IEnumerable<TResult>IEnumerable<T> ,其類型的元素 TResult 通過對兩個序列執行內部聯接獲得的。

參數類型:

TOuter第一個序列中的元素的類型。TInner第二個序列中的元素的類型。TKey鍵選擇器函數返回的鍵的類型。TResult結果元素的類型。

參考鏈接如下:

https://msdn.microsoft.com/zh-cn/library/bb534675.aspx
https://docs.microsoft.com/zh-cn/dotnet/api/system.linq.enumerable.join?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DZH-CN%26k%3Dk(System.Linq.Enumerable.Join%60%604);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.0);k(DevLang-csharp)%26rd%3Dtrue&view=netframework-4.7.1

例程:

using System;using System.Collections.Generic;using System.Linq;namespace ConsoleApp33{ class Program { static void Main(string[] args) {  GroupJoinEx(); } static void GroupJoinEx() {  Person p1 = new Person() { Name = "ABC", Age = 18 };  Person p2 = new Person() { Name = "EFG", Age = 19 };  Person p3 = new Person() { Name = "LMN", Age = 20 };  Person p4 = new Person() { Name = "XYZ", Age = 21 };  List<Person> pList = new List<Person> { p1, p2, p3, p4 };  Department d1 = new Department() { Name = "A1", Employee = p1 };  Department d2 = new Department() { Name = "A2", Employee = p2 };  Department d3 = new Department() { Name = "A3", Employee = p1 };  Department d4 = new Department() { Name = "B1", Employee = p3 };  Department d5 = new Department() { Name = "B2", Employee = p4 };  Department d6 = new Department() { Name = "B3", Employee = p4 };  List<Department> dList = new List<Department> { d1, d2, d3, d4, d5, d6 };  var result = pList.Join(dList,  person => person,  department => department.Employee,  (person, department) => new  {   Person = person,   Department = department  });  foreach(var item1 in result)  {  Console.Write($"Name:{item1.Person} & Department:{item1.Department} ");  Console.WriteLine();  } } } class Person { public string Name { set; get; } public int Age { set; get; } public override string ToString() {  return $"{Name},{Age}"; } } class Department { public string Name { set; get; } public Person Employee { set; get; } public override string ToString() {  return $"{Name}"; } }}

輸出結果:

對于GroupJoin的用法說明如下:

語法:

public static IEnumerable<TResult> GroupJoin<TOuter, TInner, TKey, TResult>( this IEnumerable<TOuter> outer, IEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector, Func<TInner, TKey> innerKeySelector, Func<TOuter, IEnumerable<TInner>, TResult> resultSelector)

參數說明:

outerType: System.Collections.Generic.IEnumerable<TOuter>

要聯接的第一個序列。

innerType: System.Collections.Generic.IEnumerable<TInner>

要與第一個序列聯接的序列。

outerKeySelectorType: System.Func<TOuter, TKey>

用于從第一個序列的每個元素提取聯接鍵的函數。

innerKeySelectorType: System.Func<TInner, TKey>

用于從第二個序列的每個元素提取聯接鍵的函數。

resultSelectorType: System.Func<TOuter, IEnumerable<TInner>, TResult>

用于從第一個序列的元素和第二個序列的匹配元素集合中創建結果元素的函數。

返回值

Type: System.Collections.Generic.IEnumerable<TResult>IEnumerable<T> ,其中包含類型的元素 TResult 通過對兩個序列執行分組的聯接獲得的。

參數類型:

TOuter第一個序列中的元素的類型。TInner第二個序列中的元素的類型。TKey鍵選擇器函數返回的鍵的類型。TResult結果元素的類型。

參考鏈接如下:

https://msdn.microsoft.com/zh-cn/library/bb534297.aspx
https://docs.microsoft.com/zh-cn/dotnet/api/system.linq.enumerable.groupjoin?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DZH-CN%26k%3Dk(System.Linq.Enumerable.GroupJoin%60%604);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.0);k(DevLang-csharp)%26rd%3Dtrue&view=netframework-4.7.1

例程:

using System;using System.Collections.Generic;using System.Linq;namespace ConsoleApp33{ class Program { static void Main(string[] args) {  GroupJoinEx(); } static void GroupJoinEx() {  Person p1 = new Person() { Name = "ABC", Age = 18 };  Person p2 = new Person() { Name = "EFG", Age = 19 };  Person p3 = new Person() { Name = "LMN", Age = 20 };  Person p4 = new Person() { Name = "XYZ", Age = 21 };  List<Person> pList = new List<Person> { p1, p2, p3, p4 };  Department d1 = new Department() { Name = "A1", Employee = p1 };  Department d2 = new Department() { Name = "A2", Employee = p2 };  Department d3 = new Department() { Name = "A3", Employee = p1 };  Department d4 = new Department() { Name = "B1", Employee = p3 };  Department d5 = new Department() { Name = "B2", Employee = p4 };  Department d6 = new Department() { Name = "B3", Employee = p4 };  List<Department> dList = new List<Department> { d1, d2, d3, d4, d5, d6 };  var result = pList.GroupJoin(dList,  person => person,  department => department.Employee,  (person, departments) => new  {   Person = person,   Department = departments.Select(d => d)  });  foreach(var item1 in result)  {  Console.Write($"Name:{item1.Person} & ");  foreach(var item2 in item1.Department)  {   if(item1.Department.First() == item2)   Console.Write($"Department:{item2} ");   else   Console.Write($"{item2} ");  }  Console.WriteLine();  } } } class Person { public string Name { set; get; } public int Age { set; get; } public override string ToString() {  return $"{Name},{Age}"; } } class Department { public string Name { set; get; } public Person Employee { set; get; } public override string ToString() {  return $"{Name}"; } }}

輸出結果:

以上代碼僅在Join與GroupJoin最后一個參數有區別,可以參見紅色字體部分,

并從以上結果來看,Join與GroupJoin的區別一個在于:Join僅僅是將兩個結合進行關聯,而GroupJoin則會進行分組。

總結

以上所述是小編給大家介紹的C#中使用Join與GroupJoin將兩個集合進行關聯與分組,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 会理县| 红河县| 雷山县| 承德县| 西乡县| 河西区| 嘉善县| 阿拉善右旗| 石狮市| 岫岩| 出国| 榆中县| 武平县| 米泉市| 罗甸县| 玉树县| 礼泉县| 平顺县| 赣州市| 铜鼓县| 东山县| 扎赉特旗| 合山市| 长顺县| 泌阳县| 庆云县| 安阳县| 克东县| 枣阳市| 青冈县| 德保县| 公主岭市| 皮山县| 宾阳县| 苍溪县| 曲周县| 龙海市| 西青区| 石屏县| 文成县| 荆州市|