0

我目前正在根据页面的下拉列表获取类型列表。我的问题是我需要在控制器中检查该项目是否处于活动状态,然后再显示在下拉列表中。

我在控制器中获取列表的当前代码是:

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

我想添加

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

但不知道如何将它添加到我已经拥有的代码行中。

4

4 回答 4

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 回答
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

谢谢大家的帮助!我能够思考它并重写我的列表是如何制作的,然后我可以添加我的 .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 回答