2017-03-01 27 views
-3

我有帳戶的列表列表中刪除一些重複如下:從對象給定的條件

Accounts   ID 
1000    123 
1000    123 
1000    456 
2000    789 
2000    789 

我想,如果有在ID列一個帳戶沒有多個ID,以便移除重複的所有出現。在這種情況下,只有帳戶2000應該被刪除。我如何在代碼中實現這一點?

+1

.Distinct()... – raven

+0

不完全確定我明白。 2000年的賬戶都應該被移除,但是所有的三千個賬戶都應該保留? – smead

+0

是的,這個想法。賬戶1000應該保留,因爲它們與多個ID相關聯 – User11040

回答

0

我認爲你可以用這樣的語句實現這一點:

accounts.Where(a => accounts.Any(b => 
    (b.Account == a.Account) && (b.ID != a.ID))); 

可能不是最優化的方式,如果你有一個龐大的數據庫,但。

+0

工作正常!非常感謝 – User11040

+0

爲什麼downvote? – smead

-1

除了鮮明,您還可以使用組通過(有時執行速度也更快處理更大的數據):

lstAccount= lstAccount.GroupBy(x => new {x.ID}) 
          .Select(x => x.First()).ToList(); 
+0

你測試了嗎? – Enigmativity

+0

是的,除非我錯過了這個問題。 –

+0

OP想要刪除兩個「2000」帳戶 - 您的解決方案保留一個。 – Enigmativity

1

您可以通過Accounts組並獲得具有多個不同的ID組:

var result = list.GroupBy(x => x.Accounts) 
       .Where(g => g.Skip(1).Any(x => x.ID != g.First().ID)) 
       .SelectMany(x => x).ToList(); 
+1

最好使用'.Skip(1).Any()'而不是'.Count()> 1'來防止組的完整迭代。 – Enigmativity

+0

感謝@Enigmativity,忘記了'.Distinct()中的延遲執行 – Slai