C# Lambda List Distinct寫法(group by ... select first)
因為List<Class>要進行多欄位Distinct時, 需在Class裡Overide Equals 和 GetHashCode, 可以使用下列語法替代。參考這篇。
利用Group後, 取得每個Group第一組資料出來, 達到Distinct效果。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- class ClassA
- {
- public int Property1 { get; set; }
- public string Property2 { get; set; }
- public double Property3 { get; set; }
- public string Property4 { get; set; }
- public int Property5 { get; set; }
- }
- class Program
- {
- static void Main()
- {
- // 創建一個 List<ClassA> 的範例資料
- List<ClassA> listOfClassA = new List<ClassA>
- {
- new ClassA { Property1 = 1, Property2 = "A", Property3 = 1.1, Property4 = "X", Property5 = 100 },
- new ClassA { Property1 = 1, Property2 = "A", Property3 = 1.1, Property4 = "Y", Property5 = 101 },
- new ClassA { Property1 = 2, Property2 = "B", Property3 = 2.2, Property4 = "X", Property5 = 102 },
- new ClassA { Property1 = 2, Property2 = "B", Property3 = 2.2, Property4 = "Y", Property5 = 103 },
- new ClassA { Property1 = 3, Property2 = "C", Property3 = 3.3, Property4 = "Z", Property5 = 104 }
- };
- // 使用 LINQ 進行分組,並取得每個群組的第一個元素
- var groupedResults = listOfClassA.GroupBy(a => new { a.Property1, a.Property2, a.Property3 })
- .Select(group => group.First());
- // 輸出結果
- foreach (var result in groupedResults)
- {
- Console.WriteLine($"Property1: {result.Property1}, Property2: {result.Property2}, Property3: {result.Property3}");
- }
- }
- }
留言
張貼留言