我有兩個以下值列表。將兩個列表合併在一起,並且如果它存在於另一個值上,則取一個值
PirateShipList1
Date | PirateShipName | CrewMembers
---------------------------------------------
1/1/1800 | Cindy | 5
1/2/1800 | TheIvan | 20
1/3/1800 | TheTerrible | 10
而且PirateShipList2
Date | PirateShipName | CrewMembers
---------------------------------------------
1/1/1800 | Cindy | 0
1/2/1800 | Cindy | 0
1/3/1800 | Cindy | 0
1/1/1800 | TheIvan | 0
1/2/1800 | TheIvan | 0
1/3/1800 | TheIvan | 0
1/1/1800 | TheTerrible | 0
1/2/1800 | TheTerrible | 0
1/3/1800 | TheTerrible | 0
我想這兩個列表合併的日期和PirateShipName這樣,如果它是存在於列表1,我把它的機組人員價值,否則我把名單2 CrewMembers值。
因此最終列表看起來像。
Date | PirateShipName | CrewMembers
---------------------------------------------
1/1/1800 | Cindy | 5
1/2/1800 | Cindy | 0
1/3/1800 | Cindy | 0
1/1/1800 | TheIvan | 0
1/2/1800 | TheIvan | 20
1/3/1800 | TheIvan | 0
1/1/1800 | TheTerrible | 0
1/2/1800 | TheTerrible | 0
1/3/1800 | TheTerrible | 10
我發現我可以通過以下
List<PirateLedgers> Final = PirateShipList2.Union(PirateShipList1)
.GroupBy(x => new { x.Date, x.PirateShipName })
.Select(x => new PirateLedgers
{
Date = x.Key.Date,
PirateShipName = x.Key.PirateShipName,
CrewMembers = x.Sum(l => l.CrewMembers)
}).ToList<PirateLedgers>();
做到這一點hackily但我懷疑,有一個實際參加這樣做的更聰明,更好的辦法。先謝謝你了!
https://codereview.stackexchange.com –
您的查詢和它的描述是完全不同的。描述是「合併列表,優先於列表1中的值到列表2」,並且查詢是「合併列表並對值進行求和」。它們只是相同的,因爲在你的特例中,列表2中的所有值都是零。如果列表2中的值不是零,會發生什麼? –
如何修改PirateShipList2 **的一個**克隆,然後在PirateShipList1 **上運行一個** foreach循環,以及如果找到該特定日期和PirateShipName的任何記錄**替換CrewMembers ** ...我不知道多少會更好,因爲會惹你的查詢....只是我的想法:) –