2014-04-11 64 views
1

我有一個名爲copyAgencies的對象,它包含被調用程序中的另一個對象,其中包含有關該程序(名稱,ID等)的各種信息。我寫了一個foreach循環,刪除所有與我通過的id參數不匹配的程序。例如,程序可能包含11個不同的程序,我傳入3個id,並想從copyAgencies對象中刪除其他8個程序。我如何做到這一點?以下是我的失敗代碼。從linq中的對象中刪除嵌套值

foreach (int id in chkIds){ 
//copyAgencies.Select(x => x.Programs.Select(b => b.ProgramId == id)); 
copyAgencies.RemoveAll(x => x.Programs.Any(b => b.ProgramId != id)); //removes all agencies 
} 
+0

你有什麼代碼產生? – clcto

+0

爲我們提供了更多有關您的課程的信息。據我所知,您希望從「程序」中刪除程序,而不是代理機構 –

+0

該代碼爲我提供了一個代理機構,其中有11個程序與之關聯。我想刪除不等於我通過的編號 – jpavlov

回答

1

如果你只有像你這樣的一個機構在您的評論說,這是所有你關心的,試試這個:

copyAgencies[0].Programs.RemoveAll(x => !chkIds.Contains(x.ProgramId)); 
+0

就是它Racil,在這個函數中只會有一個代理並且永遠不會再有。偉大的思想! – jpavlov

0

一個簡單的方法來過濾掉值是爲了避免移除值你不是有趣,但過濾你感興趣的那些:

var interestingPrograms = Programs.Where(p => chkIds.Contains(p.Id)); 

爲了這個應用到你的機構,你可以簡單地列舉機構和濾除Programs財產

var chckIds = new List<int>() {1,2,3}; 
foreach (var a in agencies) 
{ 
    a.Programs = a.Programs.Where(p => chkIds.Contains(p.Id)); 
}