用Linq排除已存在另一份清單中的資料並去掉重複項目
ARCI 表中,我要和負責設計、開發的人員面談,所以要排除 Inform 成員。因為成員在不同的工作包中,可能擔任不同角色,所以一開始串起來的清單中,會有重複的名稱出現,所以要排除重複出現的成員。換言之,最後留下來的清單中,應該只會排除純 Inform 角色的成員,且重複的名稱只會留下一筆:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LinqExceptPractice
{
internal class Program
{
private static void Main(string[] args)
{
//取得團隊所有成員,但是要排除 Inform 成員,還要排除重複。
Console.WriteLine("方法1 **************");
var Way1 = (from tm in GetTeamMembers()
where !GetInformUsers().Contains(tm)
select tm).Distinct();
OutputListContent<string>(Way1);
Console.WriteLine("自動 Distinct() 的 方法2 **************");
//var Way2 = (GetTeamMembers().Except(GetInformUsers())).Distinct();
var Way2 = GetTeamMembers().Except(GetInformUsers());
OutputListContent<string>(Way2);
Console.WriteLine("脫褲子放屁的 方法3 **************");
var Way3 = GetTeamMembers().Except(from tm in GetTeamMembers()
from iu in GetInformUsers()
where tm == iu
select tm);
OutputListContent<string>(Way3);
}
public static List<string> GetInformUsers()
{
List<string> InformUsers = new List<string> { "黃金鼠", "鋼鐵牛", "火爆虎" };
return InformUsers;
}
public static List<string> GetTeamMembers()
{
List<string> TeamMembers = new List<string> { "黃金鼠", "鋼鐵牛", "火爆虎",
"靈活兔","神速馬", "鋼鐵牛", "天空龍", "喜羊羊",
"天空龍", "機智蛇", "機智蛇", "神速馬"};
return TeamMembers;
}
public static void OutputListContent<T>(IEnumerable<T> users)
{
foreach (var u in users)
{
Console.WriteLine(u);
}
}
}
}
我個人寫的時候,是寫方法 1,後來發現方法 2 更簡單,但是方法 2 我這次寫文章時,才發現加不加 Distinct() 結果相同(都會 Distinct),但是我不了解為什麼,有專家可以告訴我原因嗎?至於方法 3,【在這個案例】真的是脫褲子放屁,不過也許有些案例是必須這麼做,有空再來想想。
--------
沒什麼特別的~
不過是一些筆記而已