【问题标题】:Need solution for troubled null problem需要解决困扰空问题的解决方案
【发布时间】:2010-01-02 18:50:54
【问题描述】:

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

这里的问题是,如果 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

【问题讨论】:

    标签: c# linq-to-sql argumentnullexception


    【解决方案1】:

    不要使用null,而是使用内置的Empty enumerable:

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

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

    【讨论】:

      【解决方案2】:

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

       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>();
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 什么意思? :) 这里的列表应该包含 0 元素,如果它没有的话。但不是那样,而是直接变为 null,这导致 IEnumerable.Contains 挣扎。我不知道有什么办法可以摆脱这个问题。
        猜你喜欢
        • 2014-07-26
        • 2020-08-31
        • 2016-03-31
        • 1970-01-01
        • 1970-01-01
        • 2023-01-26
        • 2011-02-07
        • 1970-01-01
        • 2020-09-26
        相关资源
        最近更新 更多