添加 .where 以检查项目
本文关键字:项目 检查 where 添加 | 更新日期: 2023-09-27 18:30:23
我目前正在根据页面的下拉列表获得类型列表。我的问题是,在显示在下拉列表中之前,我需要在控制器中检查该项目是否处于活动状态。
我在控制器中获取列表的当前代码是:
viewModel.AvailableSongTypes = viewModel.songTypeId.HasValue
? _songTypeService.GetSongTypeItems(viewModel.SongTypeId.ToString())
: _songTypeService.GetSongTypeItems();
我想添加
.Where(a=>a.IsActive ?? false)
但不确定如何将其添加到我已经拥有的代码行中。
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);
你可以做:
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);
我认为这样的东西就是你要找的(我现在不在一台装有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
调用中直接内联它。
大家谢谢你的帮助!我能够考虑它并重写我的列表是如何制作的,然后我能够添加我的 .where 短语。这是我将其更改为的内容:
viewModel.AvailableSongTypes =
_songTypeRepository.FindAll().OrderBy(o => o.Description).Where(a => a.IsActive).ToSelectList(
"SongTypeId", "Description", viewModel.SongTypeId.ToString());