2

オブジェクトのリストを取得するメソッドがあります。
オブジェクトを永続化する前に、特定の条件でそれらのいくつかを削除する必要があります

たとえば(理想的ではありません!):

会社は、IDとブランチのリスト、およびIsDeletedフラグを持つことができます。
ブランチには、IDとマネージャーのリスト、およびIsDeletedフラグを含める
ことができます。マネージャーには、IDとIsDeletedフラグを含めることができます。Company-
> Branches-> Managers

Id=0とIsDeleted=Trueの組み合わせを省略して、それを繰り返して詳細を実行できるようにするためのフィルタリングの簡単または最良の方法は何ですか?以下の関数を参照してください

  • それは、会社がそのようにマークされている場合、Id = 0 and IsDeleted私はそれを完全に省略したいです
  • ただし、支店のみがマークされているId=0 and Isdeleted場合、会社は支店なしで存在する必要があります
  • マネージャーだけが問題を抱えているId=0 and Isdeleted場合は、会社と支店が存在する必要があります

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
4

3 に答える 3

2

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
于 2012-09-22T22:12:45.760 に答える
1

これで問題は解決しますか?

Dim filtererdComp = comp _
    .Where(Function(c) c.Id<>0 Or Not c.IsDeleted)
    .ToList()
For each c as Company in filtererdComp
    c.Branches = c.Branches _
        .Where(Function(b) b.Id<>0 Or Not b.IsDeleted) _
        .ToList()
    For each b As Branch in c.Branches
        b.Managers = b.Managers _
            .Where(Function(m) m.Id<>0 Or Not m.IsDeleted) _
            .ToList()
    Next
Next
于 2012-09-22T22:13:47.473 に答える
0

反復の各レベル内で、そのレベルの既存のすべての要素をループします。ifステートメントを使用して、ID = 0およびIsDeletedがtrueであるかどうかを確認します。trueの場合、エントリを削除します。

于 2012-09-22T22:15:06.660 に答える