1

一天以来,我在我的存储库中遇到了这个空问题。这是我为 linq to sql 编写的一段代码...我尝试了很多选项,但对此没有帮助。

这里的问题是,如果 vidList 有空值,它就会卡在第 3 行。

如果 vidList 没问题,但 fidListE 为 null,它仍然会在返回中导致 null 异常。

我尝试了很多选项,例如使用计数,使用'??' ...但仍然没有帮助。

    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

4

3 回答 3

1

你有没有在方法的最开始尝试过这样的事情。如果参数为空,这会将其设置为空列表。

 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>();
于 2010-01-02T18:59:10.360 回答
1

不要使用 null,而是使用内置的 Empty 可枚举:

IEnumerable<int> fidListE = (fidList != null) ? fidList.Distinct() : Enumerable.Empty<int>();

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

于 2010-01-02T20:19:13.180 回答
0

如果列表不是由可为空的整数组成,即

于 2010-01-02T18:54:54.033 回答