簡體   English   中英

使用linq合並2個列表,其中至少一個屬性已更改

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM