我的DBML公开了一个具有可为空的nvarchar字段的记录集。这个可空的nvarchar字段在我的C#代码中表示为一个字符串。
有时此字段为空,有时它是一个空字符串,有时它实际上有一个值。
String.IsNullOrEmpty()
是否适用于LINQ To SQL?例如,以下工作:
var results = from result in context.Records
where String.IsNullOrEmpty(result.Info) == false
select result;
答案 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));