需要解决陷入困境的空问题

时间:2010-01-02 18:50:54

标签: c# linq-to-sql argumentnullexception

有一天,我在我的存储库中遇到了这个空问题。这是我为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

3 个答案:

答案 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:

,而不是使用null
IEnumerable<int> fidListE = (fidList != null) ? fidList.Distinct() : Enumerable.Empty<int>();

现在,Contains()方法始终返回false,您不必在查询中检查null。

答案 2 :(得分:0)

列表中是否应该由可为空的整数组成,即