【问题标题】:String.IsNullOrEmpty in LINQ To SQL query?LINQ To SQL 查询中的 String.IsNullOrEmpty?
【发布时间】:2011-11-08 17:56:44
【问题描述】:

我的 DBML 公开了一个具有可为空的 nvarchar 字段的记录集。这个可为空的 nvarchar 字段在我的 C# 代码中表示为字符串。

这个字段有时是空的,有时是空字符串,有时它实际上是有值的。

String.IsNullOrEmpty() 是否在 LINQ To SQL 中工作?例如,以下工作是否可行:

var results = from result in context.Records
              where String.IsNullOrEmpty(result.Info) == false
              select result;

【问题讨论】:

标签: c# linq-to-sql


【解决方案1】:

奇怪的是,支持每个 MSDN String.IsNullOrEmpty(因为它不受支持),但我只能找到关于它的投诉 not being supported

但是,如果它确实有效,则不应将其显式与布尔值进行比较,而是:

var results = from result in context.Records
          /*XXX broke :( where !String.IsNullOrEmpty(result.Info) */
          where !(result.Info == null || result.Info.Equals(""))
          select result;

【讨论】:

  • 这对我不起作用。 Profiler 仅显示检查空字符串,但不检查 null 值。
【解决方案2】:

我不知道这是否有效,但我确信这有效:

where (result.Info ?? "") != ""

(强烈推荐使用括号,没有它们查询生成器可能会混淆)

【讨论】:

【解决方案3】:

不支持,因为尝试使用它会导致NotSupportedException 被抛出此消息:

方法 'Boolean IsNullOrEmpty(System.String)' 不支持 翻译成 SQL。

相反,您可以使用这种方法来做同样的事情:

var results = from result in context.Records
              where result.Info != null && result.Info.Length > 0
              select result;

您也可以使用result.Info != String.Empty 而不是检查长度。两种方法都可以。

【讨论】:

    【解决方案4】:

    除了@ahmad-mageed 的回答之外,我对所有答案都有疑问。

    最终使用了更简洁的语法:

    where (result.Info ?? "").Length > 0
    

    或者

    result => (result.Info ?? "").Length > 0
    

    【讨论】:

      【解决方案5】:

      如果你使用 Linq 查询,你可以使用函数作为 Where 方法的参数,例如

      var results = context.Records.Where(string.IsNullOrEmpty);
      

      但在这种情况下,这会给你所有 null 或空元素,而不是相反。然后为字符串类创建一个扩展方法(例如 string.IsNotNullOrEmpty)或执行以下操作:

      var results = context.Records.Except(context.Records.Where(string.IsNullOrEmpty));
      

      【讨论】:

        猜你喜欢
        • 2010-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多