[英]Merge 2 lists with linq where at least one property has changed
var usersOld = new List<User>();
var userOld1 = new User { IsDisabled = true, IsLicenced = false, Id = 1 };
var userOld2 = new User { IsDisabled = true, IsLicenced = false, Id = 2 };
var userOld3 = new User { IsDisabled = true, IsLicenced = false, Id = 3 };
var userOld4 = new User { IsDisabled = true, IsLicenced = false, Id = 4 };
usersOld.Add(userOld1);
usersOld.Add(userOld2);
usersOld.Add(userOld3);
usersOld.Add(userOld4);
var usersToday = new List<User>();
var userNew1 = new User { IsDisabled = true, IsLicenced = true, Id = 1 };
var userNew2 = new User { IsDisabled = true, IsLicenced = false, Id = 2 };
var userNew3 = new User { IsDisabled = false, IsLicenced = false, Id = 3 };
var userNew4 = new User { IsDisabled = true, IsLicenced = true, Id = 4 };
usersToday.Add(userNew1);
usersToday.Add(userNew2);
usersToday.Add(userNew3);
usersToday.Add(userNew4);
var query = null;
如何將兩個列表合並到一個列表中,其中至少一個屬性已更改,因此用戶“臟”
//根據我的邏輯,id為1、3和4的用戶的兩個屬性均發生了更改。 請注意,在現實生活中,可以而且將會比這兩個屬性擁有更多的屬性。
就像Mephy所說的那樣,實現IEquatable<User>
將使事情變得更簡單-那時,您可以執行IEquatable<User>
:
var changes = usersOld.Join(usersNew, o => o.Id, n => n.Id,
(o, n) => new { Old = o, New = n })
.Where(pair => !pair.Old.Equals(pair.New));
然后,每當添加相關屬性時,只需更改Equals
實現以考慮到這一點。
結果是成對的序列-當前是匿名類型,但是如果要從方法返回Tuple<,>
則可以使用Tuple<,>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.