添加.where来检查项目

时间:2012-04-06 20:01:20

标签: c# asp.net-mvc linq

我目前正在获取类型列表,具体取决于页面的下拉列表。我的问题是,我需要在显示在下拉列表中之前检查控制器是否有效。

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

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

我想添加

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

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

4 个答案:

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