C# LINQ To SQL查询中的String.IsNullOrEmpty?

C# LINQ To SQL查询中的String.IsNullOrEmpty?,c#,linq-to-sql,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) == f

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

有时此字段为空,有时为空字符串,有时实际有值

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

var results = from result in context.Records
              where String.IsNullOrEmpty(result.Info) == false
              select result;
奇怪的是,per MSDN是受支持的(因为它没有被支持),但我只能找到关于它的抱怨

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

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

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

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

(强烈建议使用参数,查询生成器在没有它们的情况下可能会感到困惑)

不支持它,因为尝试使用它会导致与此消息一起引发
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
而不是检查长度。这两种方法都有效。

除了@ahmad Maged的答案,我对所有答案都有疑问

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

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


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

var results = context.Records.Where(string.IsNullOrEmpty);
但在本例中,这将为您提供所有null或空元素,而不是相反的元素。然后创建string类的扩展方法(例如string.IsNotNullOrEmpty)或执行以下操作:

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

你可以试试,林帕德是你的朋友。()重复的我喜欢这个,但我想很像
String.IsNullOrEmpty
如果没有这样的文档就不受支持!Oy.对我有用,但这种编码方式行吗?那对我没用。探查器仅显示空字符串的检查,而不显示
null
值的检查。
var results = context.Records.Except(context.Records.Where(string.IsNullOrEmpty));