.net - 从列表中过滤或删除(T 个)

标签 .net vb.net generics

我有一个方法,它接受对象列表。
在保留对象之前,我必须在某些给定条件下删除其中一些对象

例如(不是理想的!):

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/

相关文章:

c# - 当用于暂停线程时,循环 Thread.Sleep() 是否会影响性能?

c# - 支持索引 View 的 session 设置

.net - 单元测试新手

C#。如何以编程方式从控制台应用程序中选择和复制文本?

mysql - jquery datepicker 日历 - 用 mysql vb 填充

vb.net - 如何在vb.net中为datetimepicker设置自定义格式?

.net - 使用响应式(Reactive)扩展 (RX),是否可以将 .Buffer 时间向后移动 10 秒?

java - 泛型接口(interface)的非泛型子类

java - 泛型和 Java8 Streams 的未经检查的调用错误

generics - Swift 泛型 *= 运算符错误