如何用LINQ解决这个问题?

时间:2013-09-20 00:19:55

标签: vb.net linq

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

enter image description here

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

Dim list As New List(Of CatlogViewModel)

' CatlogViewModel has the property of Id, CategoryId, StatusId    

3 个答案:

答案 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