2012-05-25 113 views
10

我在C#4.0中使用PetaPoco Micro-ORM。如何检查var值为空值?

下面的代码从数据库中检索单个行:

var result = db.SingleOrDefault<TdUsers>(getUserQuery); 

我想检查的结果是否包含任何行,以及是否为空。做这个的最好方式是什么?

+0

你有什么? – sehe

回答

15
if (result != null || result.Count() == 0) { 
    // Checks whether the entire result is null OR 
    // contains no resulting records. 
} 

我觉得这个问题是不是在你的支票null,因为LINQ是懒加载。您的错误是使用表达式db.SingleOrDefault<TdUsers>(getUserQuery);

.Single<T>(expression)不返回空 - 如果结果没有返回任何值,则返回错误。然而,如果表达式不生成任何值,则返回空值,因此最好与if (result == null)类型检查组合使用,正如您在此处使用的那样。

+0

尝试结果!= null,但它显示“未将对象引用设置为对象的实例”。 – RKh

+3

@RPK - 你可以在问题中发布你的代码吗?这应该工作。 – ChrisF

+0

我编辑了我的答案 –

1
var v = result.ToList(); 

现在检查

if (v.Count > 0) 
+0

请参阅我对上述答案的评论。 –

3

你可以这样做:

result.ToList() // Convert result to a list 

if (result.Any()) { 
    // result is not null 
} 
+0

没有结果== null不会永远是假的..你认为什么是任何引用类型的默认值? –

+0

@ParvSharma - 正确,调整。 –

+0

:).................... –

3
var result = db.SingleOrDefault<TdUsers>(getUserQuery); 

在上面的代码中的SingleOrDefault返回null淡水河谷或指定 泛型类型(它被称为上运行)。

中序检查返回值是否为空或不是,你可以简单地使用

if(result!=null) 
{ 
//do your code stuff 
} 
else 
{ 
//stuff do be done in case where result==null 
}