有一天,我在我的存储库中遇到了这个空问题。这是我为linq写的代码片段...我已经尝试了很多选项,但没有帮助。
这里的问题是如果vidList得到空值,它就会卡在第3行。
如果vidList没问题,但fidListE为null,则会在返回时导致null异常。
我尝试了很多选项,比如使用Count,使用'??' ......但仍然没有帮助。
public List<ATTACHMENT> existedAttachment(IList<int> vidList, IList<int> fidList, IList<int> iidList)
{
IEnumerable<int> vidListE = vidList.Distinct();
IEnumerable<int> fidListE = (fidList != null) ? fidList.Distinct() : null;
IEnumerable<int> iidListE = (iidList != null) ? iidList.Distinct() : null;
return (from d in _db.ATTACHMENTs
.Where<ATTACHMENT>(d =>
((vidListE != null) ? (vidListE.Contains<int>(d.VID_ID.Value)) : false) ||
((fidListE != null) ? (fidListE.Contains<int>(d.FID.Value)) : false) ||
((iidListE != null) ? (iidListE.Contains<int>(d.IMG_ID.Value)) : false)
)
select d).ToList<ATTACHMENT>();
}
有人可以给我一点线索。非常感谢你。我的大脑刚刚停留在新的一年。 :P
答案 0 :(得分:1)
你是否在方法的最开始尝试过类似的东西。如果参数为null,则将其设置为空列表。
IEnumerable<int> vidListE = (vidList != null) ? vidList.Distinct() : new List<int>();
IEnumerable<int> fidListE = (fidList != null) ? fidList.Distinct() : new List<int>();
IEnumerable<int> iidListE = (iidList != null) ? iidList.Distinct() : new List<int>();
return (from d in _db.ATTACHMENTs
.Where<ATTACHMENT>( d =>
vidListE.Contains<int>(d.VID_ID.Value) ||
fidListE.Contains<int>(d.FID.Value) ||
iidListE.Contains<int>(d.IMG_ID.Value) )
)
select d).ToList<ATTACHMENT>();
答案 1 :(得分:1)
使用内置的Empty enumerable:
,而不是使用nullIEnumerable<int> fidListE = (fidList != null) ? fidList.Distinct() : Enumerable.Empty<int>();
现在,Contains()方法始终返回false,您不必在查询中检查null。
答案 2 :(得分:0)
列表中是否应该由可为空的整数组成,即