2011-07-25 51 views
0

我正在使用linq從用戶集合中刪除用戶,如下所示。有更好的做法嗎?我可以合併第一個和第二個查詢嗎?使用Linq檢入列表和篩選器集合

List<int> userIDs = ConfigurationManager.AppSettings["users"].Split(',').Select(userId =>   Convert.ToInt32(userid)).ToList(); 

foreach (int userId in userIDs) 
{ 
    userInfoList.RemoveAll(user => (user.UserId.Equals(userId))); 
} 

UserInfoList是用戶的集合。

在此先感謝

+0

'userInfoList'是否已經被項目填充,並且您想要過濾它,或者這只是您初始化它的一個步驟?您可以使用單個查詢一次創建列表。 –

+0

userInfoList將被填充。我使用Petar Ivanov解決方案,因爲我需要一些其他案例的原始列表。 – San

回答

2

這將是更有效的:

HashSet<int> userIDs = new HashSet<int>(ConfigurationManager.AppSettings["users"].Split(',').Select(userId => Convert.ToInt32(userId))); 

userInfoList.RemoveAll(user => userIDs.Contains(user.UserId)); 

如果您有n個用戶ID中和userInfoList m個元素,元素那麼你的解決方案是O(N * M)。使用HashSet,複雜性變爲O(n + m) - 好得多。 (假設散列表操作是恆定的時間)。

+0

其實,你可以正確使用'contains',因爲'user.UserId'的類型是'int'(因爲'userIds'的類型是'HashSet ') –