我有一个多选列表
,用户可以在其中选择一些或不选择输入电压
。当用户不选择 InputVoltages
时,当我调用 .Tolist()
时,我的查询会抛出 null 异常
。为什么我不只是返回一个空列表?
我正在使用 MVC5 C# 和 Entity Framework 6。
存储库
public IQueryable<InputVoltage> All
{
get { return context.InputVoltages; }
}
Controller
var newInputVoltages = unitOfWorkPds.InputVoltageRepository
.All.Where(m => engineeringPdsEditViewModel.SelectedInputVoltages
.Contains(m.Id))
.ToList<InputVoltage>();
All
确实返回一个列表,但当未选择任何内容时,SelectedInputVoltages
为 null。我想知道这是否是问题所在。
当我使用此查询并为索引页添加 where 语句时,我在调用 ToList
时不会收到 null 错误
IQueryable<EngineeringPdsIndexViewModel> query =
(from a in context.EngineeringPds
select new EngineeringPdsIndexViewModel
{
Id = a.Id,
Name = a.Name,
Status = a.Status,
AnnualQuantities = a.AnnualQuantities,
ToMarketDate = a.ToMarketDate,
SubmittedBy = a.SubmittedBy,
TargetPrice = a.TargetPrice
});
所以我相信布莱恩对问题的看法是正确的,但问题是扩展的 我有一个多选框,在 get 操作方法中填充为
IList<InputVoltage> inputVoltagesList = unitOfWorkPds.InputVoltageRepository.All.ToList();
然后
pdsEditViewModel.InputVoltageList = inputVoltagesList.Select(m => new SelectListItem { Text = m.Name, Value = m.Id.ToString() }); in my view I <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ddb5bcab9d95a9b0b1f391b4aea99fb2a59bb2af" rel="noreferrer noopener nofollow">[email protected]</a>(m => m.SelectedApprovals, Model.ApprovalList)
但是当用户没有做出任何选择时,selectedInputVoltages 会作为 null 进入我的后 Controller 操作,我如何让它作为空列表进入?
更新
对于遇到同样问题的人,布莱恩斯的第一个回答解释了这个问题。可以在此处找到提交带有空列表的列表框的解决方法
最佳答案
BCL 中为 IEnumerable<T>
定义的任何扩展方法或IQueryable<T>
返回 IEnumerable<T>
或IQueryable<T>
不会返回 null。它可能返回一个空集合,但这与 null 有很大不同。
试试这个:
var newInputVoltages = engineeringPdsEditViewModel.SelectedInputVoltages == null ?
unitOfWorkPds.InputVoltageRepository.All :
unitOfWorkPds.InputVoltageRepository.All.Where(m => engineeringPdsEditViewModel.SelectedInputVoltages.Contains(m.Id)).ToList();
关于c# - 当我的查询没有找到任何项目时,它应该返回 null 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19730790/