c# - 如果列表为空,linq 将返回 null 异常
问题描述
我面临的一个挑战是,我正在使用 LINQ 使用 Take 方法获取前 5 条记录,但如果列表为空,则它会引发以下异常:
无法将类型 'System.Nullable`1[[System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' 类型转换为 'System.Object'。LINQ to Entities 仅支持转换 EDM 基元或枚举类型。
所以请指导我如何解决它。
下面我提供我的示例代码
openTickets_Result = (from tic in db.Tickets1
join com in db.Company on tic.company_id equals com.id
join bra in db.Branch on tic.branch_id equals bra.id
join use in db.Users on tic.assinged_to equals use.Id
where companyIds.Any(x => x.Equals((long)tic.company_id))
&& branchIds.Any(x => x.Equals(tic.branch_id))
&& tic.status == "Open"
&& tic.priority == "High"
select new Details {
Assinged_To = use.FullName,
Company_Name = com.name,
Branch_Name = bra.branch_name,
ticketName=tic.Name
}).OrderBy(x => x.Create_Date).Take(5).ToList();
如果列表有时是 ,则 Take 方法会给出异常empty/null
。
解决方案
因为branchIds是 long 非空类型,x => x.Equals(tic.branch_id)而这里 tic.branch_id 是 long null 类型,所以需要对其进行类型转换
openTickets_Result = (from tic in db.Tickets1
join com in db.Company on tic.company_id equals com.id
join bra in db.Branch on tic.branch_id equals bra.id
join use in db.Users on tic.assinged_to equals use.Id
where companyIds.Any(x => x.Equals((long)tic.company_id)) && branchIds.Any(x => x.Equals((long)tic.branch_id)) && tic.status == "Open" && tic.priority == "High"
select new LiveTickets
{
Assinged_To = use.FullName,
Company_Name = com.name,
Branch_Name = bra.branch_name,
ticketName=tic.Name
}).OrderBy(x => x.Create_Date).Take(5).ToList();
无论如何感谢大家的支持。
推荐阅读
- python - 更改导入模块的日志级别
- javascript - 谷歌脚本 - 根据另一张纸上的复选框隐藏/取消隐藏谷歌表格
- azure - Azure 警报未触发/触发
- scala - 删除任何带有 NULL 的行
- javascript - 将 HOC 重构为钩子
- asp.net-mvc - 仍然有 ddl 重定向问题
- excel - VBA根据动态选择选择行
- visual-studio - 如何让我的 Visual Studio 解决方案在 teamcity 中使用最新版本的 nuget.exe
- javascript - 尝试在类内调用发射方法时,从 EventEmitter 扩展的类上未定义的“this”
- postgresql - PostgreSQL:包含秒到小时分钟秒天间隔 SECONDSDIFF 的列