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 に答える