0

現在、ページのドロップダウンに応じてタイプのリストを取得しています。私の問題は、ドロップダウンリストに表示する前に、アイテムがアクティブかどうかをコントローラーでチェックインする必要があることです。

リストを取得するためのコントローラーの現在のコードは次のとおりです。

viewModel.AvailableSongTypes = viewModel.songTypeId.HasValue
            ? _songTypeService.GetSongTypeItems(viewModel.SongTypeId.ToString())
            : _songTypeService.GetSongTypeItems();

追加したい

.Where(a=>a.IsActive ?? false)

しかし、私がすでに持っているコード行にそれを追加する方法がわかりません。

4

4 に答える 4

1

みなさん、ありがとうございました!私はそれについて考え、リストがどのように作成されているかを書き直すことができ、それから.whereフレーズを追加することができました。これは私がそれを変更したものです:

viewModel.AvailableSongTypes =
            _songTypeRepository.FindAll().OrderBy(o => o.Description).Where(a => a.IsActive).ToSelectList(
                "SongTypeId", "Description", viewModel.SongTypeId.ToString());
于 2012-04-06T20:33:27.190 に答える
1

できるよ:

viewModel.AvailableSongTypes = viewModel.songTypeId.HasValue
            ? _songTypeService.GetSongTypeItems(viewModel.SongTypeId.ToString()).Where(a => a.IsActive ?? false)
            : _songTypeService.GetSongTypeItems().Where(a => a.IsActive ?? false);

または最高のもの:

viewModel.AvailableSongTypes = (viewModel.songTypeId.HasValue
            ? _songTypeService.GetSongTypeItems(viewModel.SongTypeId.ToString())
            : _songTypeService.GetSongTypeItems()).Where(a => a.IsActive ?? false);
于 2012-04-06T20:06:25.893 に答える
1

このようなものがあなたが探しているものだと思います (現時点では Visual Studio を搭載したマシンを使用していないため、正常にコンパイルされると 100% 確信することはできません)。

Func<SongTypeItem,bool> isActive = i => i.IsActive ?? false;

viewModel.AvailableSongTypes = viewModel.songTypeId.HasValue
  ? _songTypeService.GetSongTypeItems(viewModel.SongTypeId.ToString()).Where(isActive)
  : _songTypeService.GetSongTypeItems().Where(isActive);

Where基本的に行っているのは、拡張メソッドを使用して、列挙可能な一連の「曲の種類の項目」をフィルタリングすることです。の作成は、Func isActive同じことを繰り返さないようにするためのものです。呼び出しでインライン化できWhereます。

于 2012-04-06T20:07:52.407 に答える
1
viewModel.AvailableSongTypes = viewModel.songTypeId.HasValue 
        ? _songTypeService.GetSongTypeItems(viewModel.SongTypeId.ToString()).Where(a=>a.IsActive ?? false) 
        : _songTypeService.GetSongTypeItems().Where(a=>a.IsActive ?? false); 

または

viewModel.AvailableSongTypes = (viewModel.songTypeId.HasValue 
        ? _songTypeService.GetSongTypeItems(viewModel.SongTypeId.ToString())
        : _songTypeService.GetSongTypeItems()).Where(a=>a.IsActive ?? false); 
于 2012-04-06T20:06:05.660 に答える