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 執行結果:

AEF
A1E1F1
A2E2F2
A3E4F4
A4E6F6

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 執行結果:

AEF
A1E1F1
A2E2F2
A2E2F2
A3E4F4
A3E4F4
A4E6F6

CASE-3

var list3 = list_myClass2.Distinct().ToList();

CASE-3 執行結果:

AEF
A1E1F1
A2E2F2
A2E2F2
A3E4F4
A3E4F4
A4E6F6

CASE-4

var list4 = list_myClass2.Select(c => new { A = c.A, E = c.E, F = c.F }).ToList();

CASE-4 執行結果:

AEF
A1E1F1
A2E2F2
A2E2F2
A3E4F4
A3E4F4
A4E6F6

CASE-5

var list5 = list_myClass2.Select(c => new { A = c.A, E = c.E, F = c.F }).Distinct().ToList();

CASE-5 執行結果:

AEF
A1E1F1
A2E2F2
A3E4F4
A4E6F6

 

 

 

留言

這個網誌中的熱門文章

ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務

Oracle 例外控制(Exception Control)

Oracle 工作排程 DBMS_JOB 筆記