寫一個其實很基本,但是我每次都用蠢方式解決的東西,其實 .NET LINQ 都準備好好地給你用
認識我的人都知道我碰 NOSQL 比較多,所以我常常是在Sever 變成物件後解決一些事情
最近同事說到為何不用 IntersectBy 我才想起來有這東西,就筆記一下我怕自己又忘記有好用的東西

IntersectBy 相交(交集),假設有兩個 物件群A ,B 我可以指定 A物件群 跟某個 property 與 B 物件群的某個 property 有一樣的
撈出 A 物件群有相交的部分
本程式碼範例
篩選出 ListA 的 Id 有 交集到 ListB 的 FriendId
var ListA = new List();
ListA.Add(new Models.User { Id = "A1", Name = "A1", Age = 1 });
ListA.Add(new Models.User { Id = "A2", Name = "A2", Age = 2 });
ListA.Add(new Models.User { Id = "A3", Name = "A3", Age = 3 });
ListA.Add(new Models.User { Id = "A4", Name = "A4", Age = 4 });
ListA.Add(new Models.User { Id = "A5", Name = "A5", Age = 5 });
var ListB = new List();
ListB.Add(new Models.User { Id = "B1", Name = "B1", FriendId = "A1" });
ListB.Add(new Models.User { Id = "B2", Name = "B2", FriendId = "A1" });
ListB.Add(new Models.User { Id = "B3", Name = "B3", FriendId = "A1" });
ListB.Add(new Models.User { Id = "B4", Name = "B4", FriendId = "A4" });
ListB.Add(new Models.User { Id = "B5", Name = "B5", FriendId = "A5" });
//篩選出 ListA 的 Id 有 交集到 ListB 的 FriendId
var intersectAFriends = ListA.IntersectBy(ListB.Select(e => e.FriendId), x => x.Id);
Result = JsonConvert.SerializeObject(intersectAFriends,
Newtonsoft.Json.Formatting.None,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore,
});
//Result
//[{"Id":"A1","Name":"A1","Age":1},{"Id":"A4","Name":"A4","Age":4},{"Id":"A5","Name":"A5","Age":5}]
ExceptBy 相交除外 ,剛好跟 IntersectBy 相反,就是 假設有兩個 物件群A ,B
我可以指定 A物件群 跟某個 property 都沒有 B 物件群的某個 property 給提到
程式碼案例
篩選出 ListA 的 Id 有 沒有交集到 ListB 的 FriendId
var ListA = new List();
ListA.Add(new Models.User { Id = "A1", Name = "A1", Age = 1 });
ListA.Add(new Models.User { Id = "A2", Name = "A2", Age = 2 });
ListA.Add(new Models.User { Id = "A3", Name = "A3", Age = 3 });
ListA.Add(new Models.User { Id = "A4", Name = "A4", Age = 4 });
ListA.Add(new Models.User { Id = "A5", Name = "A5", Age = 5 });
var ListB = new List();
ListB.Add(new Models.User { Id = "B1", Name = "B1", FriendId = "A1" });
ListB.Add(new Models.User { Id = "B2", Name = "B2", FriendId = "A1" });
ListB.Add(new Models.User { Id = "B3", Name = "B3", FriendId = "A1" });
ListB.Add(new Models.User { Id = "B4", Name = "B4", FriendId = "A4" });
ListB.Add(new Models.User { Id = "B5", Name = "B5", FriendId = "A5" });
//篩選出 ListA 的 Id 有 沒有交集到 ListB 的 FriendId
var exceptAFriends = ListA.ExceptBy(ListB.Select(e => e.FriendId), x => x.Id);
Result = JsonConvert.SerializeObject(exceptAFriends,
Newtonsoft.Json.Formatting.None,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore,
});
//Result
//[{"Id":"A2","Name":"A2","Age":2},{"Id":"A3","Name":"A3","Age":3}]
筆記一下,雖然簡單但是我真的常常用一些奇技淫巧人家明明就準備得很好