我的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,查询生成器可以在没有它们的情况下混淆)
它不受支持,因为尝试使用它会导致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而不是检查长度。这两种方法都会奏效。
| 归档时间: |
|
| 查看次数: |
35727 次 |
| 最近记录: |