1

我有一个包含 CategoryId 和 StatusId 的列表。如果它们是特定状态,那么我想从列表中删除所有 CategoryId。

在此处输入图像描述

在此示例中,我想删除所有 StatusId = 1 并从列表中删除该 CategoryId。因此,在这种情况下,ID 1、3 和 4 将被删除。

Dim list As New List(Of CatlogViewModel)

' CatlogViewModel has the property of Id, CategoryId, StatusId    
4

3 回答 3

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
于 2013-09-20T00:39:52.353 回答
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))
于 2013-09-20T00:26:25.130 回答
0
list.RemoveAll(Function(c) c.StatusId.Equals(1))

http://msdn.microsoft.com/en-us/library/wdka673a.aspx

使用我今天发现的 MoreLinq,您可以更加清晰 http://code.google.com/p/morelinq/

Dim categories = list.Where(Function(x) x.StatusId = 1).Select(Function(x) x.CategoryId).HashSet()

list = list.Where(Function(x) Not categories.Contains(x.CategoryId)).ToList
于 2013-09-20T00:53:32.060 回答