gpt4 book ai didi

c# - 当我的查询没有找到任何项目时,它应该返回 null 吗?

转载 作者:行者123 更新时间:2023-12-02 21:44:44 25 4
gpt4 key购买 nike

我有一个多选列表,用户可以在其中选择一些或不选择输入电压。当用户不选择 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 操作,我如何让它作为空列表进入?

更新

对于遇到同样问题的人,布莱恩斯的第一个回答解释了这个问题。可以在此处找到提交带有空列表的列表框的解决方法

How can I return an empty list instead of a null list from a ListBoxFor selection box in Asp.net MVC?

最佳答案

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com