LINQ To SQL查询中的String.IsNullOrEmpty?

时间:2011-11-08 17:56:45

标签: c# linq-to-sql

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

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

String.IsNullOrEmpty()是否适用于LINQ To SQL?例如,以下工作:

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

5 个答案:

答案 0 :(得分:41)

奇怪的是,每个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;

答案 1 :(得分:19)

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

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

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

答案 2 :(得分:4)

它不受支持,因为尝试使用它会导致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代替检查长度。这两种方法都有效。

答案 3 :(得分:0)

除@ ahmad-mageed的答案外,我所有答案都遇到问题。

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

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

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

答案 4 :(得分:0)

例如,如果您使用Linq查询,则可以将函数用作Where方法的参数。

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

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

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