0

次のような階層リストをフィルタリングする必要があります。

  • フォルダー1
  • フォルダー2
    • ドキュメント1
    • ドキュメント2
    • フォルダー4
      • ドキュメント3
      • 文書4
  • フォルダー3
    • 書類

各フォルダにはフォルダやドキュメントがあります。各ドキュメントにはStatus列挙型があります。すべての空のフォルダまたはドキュメントのステータスが「削除済み」になっているドキュメントを取得するにはどうすればよいですか?

var folders = from f in context.Folders
              // where f.Documents.All( d => d.Status == DocumentStatus.Deleted )
              select f;

遅延読み込みが有効になっています。

4

1 に答える 1

1

これはどう:

Folders.Where(folder => folder.Documents.Any(document => document.Status == DocumentStatus.Deleted));

残念ながら、より複雑な構造になっています。上記のlinqステートメントは、ドキュメントを含むフォルダーでのみ機能し、他のフォルダーでは機能しません。

必要なことを行うには、述語を手動で定義し、それでフィルター処理する必要があります。フォルダーにフォルダー自体である子がある場合、フィルターメソッドを再帰的に呼び出して、条件が真であるかどうかを確認する必要があるためです。

于 2013-01-14T10:59:09.033 に答える