我目前正在获取类型列表,具体取决于页面的下拉列表。我的问题是,我需要在显示在下拉列表中之前检查控制器是否有效。
我在控制器中获取列表的当前代码是:
viewModel.AvailableSongTypes = viewModel.songTypeId.HasValue
? _songTypeService.GetSongTypeItems(viewModel.SongTypeId.ToString())
: _songTypeService.GetSongTypeItems();
我想添加
.Where(a=>a.IsActive ?? false)
但不确定如何将其添加到我已有的代码行中。
答案 0 :(得分: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);
答案 1 :(得分: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);
答案 2 :(得分: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
调用中直接内联。
答案 3 :(得分:1)
每个人都感谢您的帮助!我能够思考它并重写我的列表是如何制作的,然后我能够添加我的.where短语。这就是我改为:
viewModel.AvailableSongTypes =
_songTypeRepository.FindAll().OrderBy(o => o.Description).Where(a => a.IsActive).ToSelectList(
"SongTypeId", "Description", viewModel.SongTypeId.ToString());