C# LINQ Lambda disinct (3)
C# LINQ Lambda disinct
若List< Class > 為多屬性的Class的LIST, 若對List直接下Distinct(), 無法取得預期去除重覆資料的結果。(即使所有欄位有重覆值, 也無效果)
若先select new 欄位屬性, 欄位數與原始相同也可, 再下Distinct(), 就可以達到去除重覆資料結果。
以下為範例程式,
資料結構
public class MyClass2
{
public string A { get; set; }
public string E { get; set; }
public string F { get; set; }
}
List<MyClass2> list_myClass2 = new List<UserQuery.MyClass2>();
list_myClass2.Add(new MyClass2() { A = "A1", E = "E1", F = "F1" });
list_myClass2.Add(new MyClass2() { A = "A2", E = "E2", F = "F2" });
list_myClass2.Add(new MyClass2() { A = "A2", E = "E2", F = "F2" });
list_myClass2.Add(new MyClass2() { A = "A3", E = "E4", F = "F4" });
list_myClass2.Add(new MyClass2() { A = "A3", E = "E4", F = "F4" });
list_myClass2.Add(new MyClass2() { A = "A4", E = "E6", F = "F6" });
CASE-1
var query1 = (from t1 in list_myClass2
select new { A = t1.A, E = t1.E, F = t1.F }).Distinct();
var list1 = query1.ToList();
CASE-1 執行結果:
A | E | F |
---|---|---|
A1 | E1 | F1 |
A2 | E2 | F2 |
A3 | E4 | F4 |
A4 | E6 | F6 |
CASE-2
var query2 = from t1 in list_myClass2
select new { A = t1.A, E = t1.E, F = t1.F };
var list2 = query2.ToList();
CASE-2 執行結果:
A | E | F |
---|---|---|
A1 | E1 | F1 |
A2 | E2 | F2 |
A2 | E2 | F2 |
A3 | E4 | F4 |
A3 | E4 | F4 |
A4 | E6 | F6 |
CASE-3
var list3 = list_myClass2.Distinct().ToList();
CASE-3 執行結果:
A | E | F |
---|---|---|
A1 | E1 | F1 |
A2 | E2 | F2 |
A2 | E2 | F2 |
A3 | E4 | F4 |
A3 | E4 | F4 |
A4 | E6 | F6 |
CASE-4
var list4 = list_myClass2.Select(c => new { A = c.A, E = c.E, F = c.F }).ToList();
CASE-4 執行結果:
A | E | F |
---|---|---|
A1 | E1 | F1 |
A2 | E2 | F2 |
A2 | E2 | F2 |
A3 | E4 | F4 |
A3 | E4 | F4 |
A4 | E6 | F6 |
CASE-5
var list5 = list_myClass2.Select(c => new { A = c.A, E = c.E, F = c.F }).Distinct().ToList();
CASE-5 執行結果:
A | E | F |
---|---|---|
A1 | E1 | F1 |
A2 | E2 | F2 |
A3 | E4 | F4 |
A4 | E6 | F6 |
留言
張貼留言