添加 .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)

但不确定如何将其添加到我已经拥有的代码行中。

添加 .where 以检查项目

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());