我有一个包含 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
首先获取该状态的所有类别:
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
您可以对列表进行查询。删除项目将需要遍历查询的值并删除找到的值。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))
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