2013-09-20 5 views
1

У меня есть список CategoryId и StatusId. Если это определенный статус, я хочу удалить из списка весь CategoryId.Как решить эту проблему с помощью LINQ?

enter image description here

В этом примере я хочу все удалить StatusID = 1 и удалить этот CategoryId из списка, а также. Итак, в этом случае идентификаторы 1, 3 и 4 будут удалены.

Dim list As New List(Of CatlogViewModel) 

' CatlogViewModel has the property of Id, CategoryId, StatusId  

ответ

4

Сначала получите все категории для этого статуса:

Dim categories = New HashSet(Of Integer)(_ 
    list.Where(Function(x) x.StatusId = 1).Select(Function(x) x.CategoryId) _ 
) 

Затем получить детали, где категория не один из тех, кто:

list = list.Where(Function(x) Not categories.Contains(x.CategoryId)).ToList 
0

Вы можете сделать запрос к списку. Удаление элемента приведет к зацикливанию значений запроса и удалению найденных. LINQ для запросов, не изменяющих.

Dim query = list.Where(Function(o) o.StatusId = 1).ToList 

For Each q In query 
If list.Contains(q) Then list.Remove(q) 
Next 

Или:

Array.ForEach(Of CatlogViewModel)(list.ToArray, Sub(q) If q.StatusId = 1 Then list.Remove(q)) 
+0

Да, я знаю, но я также хочу удалить все CategoryId из That StatusId, как хорошо! – HardCode

Смежные вопросы