我有一个方法,它接受对象列表。
在保留对象之前,我必须在某些给定条件下删除其中一些对象
例如(不是理想的!):
A Company can have an Id and a list of Branches and a IsDeleted flag.
A Branch can have an Id and a list of Managers and a IsDeleted flag
A Manager can have an Id and a IsDeleted flag
Company -->Branches-->Managers
忽略 Id = 0 和 IsDeleted = True 的组合的简单或最佳过滤方法是什么,以便我可以迭代它并执行具体操作 - 请参阅下面的函数
- 如果公司被标记为
Id = 0 且 IsDeleted
那么我想完全忽略它 - 但如果只有分支被标记为
Id=0 并被删除
,那么公司应该没有分支 - 如果只有经理被标记为
Id=0 且已删除
,则公司和分公司应该在那里
Private Function(comp as List(Of Company)) as Boolean
'filter comp here and pass it to for loop??
Dim filteredList as ...
For each c as Company in filteredList
'do company specifis here
For each b as Branch in c.Branches
'do branch specific here
For Each m as Manager in b.Managers
'do manager specific here
Next
Next
Save(c) ' saves child objects as well
Next
End Function
最佳答案
您可以使用 Linq:
Dim filtered = From c In comp Where Not c.IsDeleted OrElse c.Id <> 0
From b In c.Branches Where Not b.IsDeleted OrElse b.Id <> 0
From m In b.Managers Where Not m.IsDeleted OrElse m.Id <> 0
Select New With {.Company = c, .Branch = b, .Manager = m}
For Each x In filtered
Dim c As Company = x.Company
Dim b As Branch = x.Branch
Dim m As Manager = x.Manager
Next
或者,如果您想单独枚举每种类型:
Dim filteredComp = From c In comp Where Not c.IsDeleted OrElse c.Id <> 0
Dim filteredBranch = From c In filteredComp
From b In c.Branches Where Not b.IsDeleted OrElse b.Id <> 0
Select b
Dim filteredManager = From b In filteredBranch
From m In b.Managers Where Not m.IsDeleted OrElse m.Id <> 0
Select m
For Each c In filteredComp
Next
For Each b In filteredBranch
Next
For Each m In filteredManager
Next
关于.net - 从列表中过滤或删除(T 个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12548008/