LINQ To SQL查询中的String.IsNullOrEmpty?

Pho*_*per 24 c# linq-to-sql

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

有时这个字段为空,有时它是一个空字符串,有时它实际上有一个值.

是否String.IsNullOrEmpty()在工作的LINQ到SQL?例如,以下工作:

var results = from result in context.Records
              where String.IsNullOrEmpty(result.Info) == false
              select result;
Run Code Online (Sandbox Code Playgroud)

use*_*116 41

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

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

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


Amy*_*y B 20

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

where (result.Info ?? "") != ""
Run Code Online (Sandbox Code Playgroud)

(强烈推荐parens,查询生成器可以在没有它们的情况下混淆)

  • 我喜欢这个,但我觉得很像`String.IsNullOrEmpty`在没有文档的情况下不支持[null coalesce operator不支持文档](http://msdn.microsoft.com/en-us/library/ bb882653.aspx)!Oy公司. (2认同)

Ahm*_*eed 8

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

方法“Boolean IsNullOrEmpty(System.String)”不支持转换为 SQL。

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

var results = from result in context.Records
              where result.Info != null && result.Info.Length > 0
              select result;
Run Code Online (Sandbox Code Playgroud)

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