【问题标题】:DbNull in strongly typed DataSet replacing with String in linq强类型数据集中的 DbNull 替换为 linq 中的字符串
【发布时间】:2013-10-22 21:41:26
【问题描述】:

我不知道如何用“”替换空格。因为我在这段代码中收到了 DbNull 错误:

var subFields = permCollection
    .Where(item=>fields.Contains(item.FBFieldName))
    .Select(a=>a.FBSubFieldName)
    .ToList();

FBSubFieldName 的某些值是空白的,而有些则不是。 有什么想法吗?

【问题讨论】:

  • blank 表示什么和什么是空的?
  • 我没有说我得到了 NullException。确切的错误是:表中的“FbSubFieldName 的值”是 DbNull。

标签: c# linq


【解决方案1】:

由于这是一个强类型的DataTable,如果您访问一个可为空且为空的属性,则会引发异常(默认情况下)。

您有一个自动生成的 bool 属性,指示它是否为空,将其与 conditional operator(?) 一起使用:

var subFields = permCollection
    .Where(item  => fields.Contains(item.FBFieldName))
    .Select(item => item.IsFBSubFieldNameNull ? "" : item.FBSubFieldName)
    .ToList();

【讨论】:

  • 太好了,很有效,谢谢先生! PS:它的 IsFbSubFieldNameNull()
【解决方案2】:

可能是这样的:

var subFields = permCollection
    .Where(item=>item.FBSubFieldName!=null && fields.Contains(item.FBFieldName) )
    .Select(a=>a.FBSubFieldName)
    .ToList();

我在这里假设,根据提供的代码,FBSubFieldName 是在Select 中查询的相同“数据”的字段。

如果这不是您的要求,请澄清。

【讨论】:

    【解决方案3】:

    您需要对字段进行 DBNull 测试。 尝试让初学者来

    var subFields = permCollection
    .Where(item=>!(item.FBSubFieldName is System.DBNull) && fields.Contains(item.FBFieldName) )
    .Select(a=>a.FBSubFieldName)
    .ToList();
    

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多