我有一个包含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
答案 0 :(得分: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
答案 1 :(得分: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))
答案 2 :(得分: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