【问题标题】:How do I handle null values in Linq2Sql list如何处理 Linq2Sql 列表中的空值
【发布时间】:2011-09-02 07:23:13
【问题描述】:

我的列表中有几个字段,其中一些字段为空,因为它们在基础表中没有记录。因此,在将其与中继器控件绑定时,我得到了NullReferenceException

那么,我应该怎么做,在绑定时处理 null 或者是否有任何其他方法,以便中继器或 datalist 或 gridview 将自动处理 null 值。

注意:我在我的 aspx 页面中使用 <%# Eval("FieldName")%>,而数据库中的 FieldNamenull

请指导我....

【问题讨论】:

    标签: c# asp.net linq-to-sql anonymous-types


    【解决方案1】:
    <%# Eval("FieldName") ?? "" %>
    

    【讨论】:

      【解决方案2】:

      您可以将一些计算属性添加到您的实体类中。

      像这样:

      public string DisplayName
      {
           get
           {
               return this.Name ?? "N/A";
           }
      }
      

      如果 Name 为空,这将返回 Name 或预定义的字符串。

      【讨论】:

        【解决方案3】:

        自从第一次添加以来,我已经更改了这个答案 - 但它以更紧凑的形式合并了我原始答案的两个部分。这可以处理谨慎的 null 和 DBNull.Value。

        <%# (Eval("FieldName") ?? DBNull.Value) != DBNull.Value ? 
             Eval("FieldName") : "" %>
        

        由于 Eval 的双重调用,它的效率有点低 - 您可以通过向控件的基类添加一个辅助方法来解决这个问题。

        我不建议修改类属性代码,除非该类纯粹是为了显示,因为当值为 null 时,您将更改属性 get 的语义。

        如果该字段实际上不应该为空,那么您应该在类和数据库上设置防止空值发生的门。

        【讨论】:

        • +1,没有想到这一点,虽然我的猜测可能是 DBNull 和 null,但您可能希望针对这种情况扩展您的样本。如果您的编辑指的是我的回答(关于属性获取器),那么我不同意。它不是关于修改,它是关于为此目的添加一个只读属性,这没关系。
        • @UrbanEsc - 同意 - 您为 Display 添加了一个属性,而不是更改了属性声明;所以这不会违反我描述的规则。我已经看到它是由与我共事过的人完成的:)
        猜你喜欢
        • 2015-12-27
        • 1970-01-01
        • 2013-11-05
        • 2010-11-17
        • 2015-10-27
        • 1970-01-01
        • 2016-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多