2014-01-06 94 views
2

我不能将我的SQL代码:
NHibernate的queryover.where对象引用不设置到对象的实例

SELECT * 
FROM Message 
WHERE MessageId = @MessageId OR @MessageId IS NULL 

要LINQ:

var list = session.QueryOver<Message> 
    .Where(p => p.MessageId == finder.MessageId || finder.MessageId == null) 
    .List<Message>(); 

如果finder.MessageId不为空- 是工作。但我收到异常“对象引用未设置为对象的实例”。如果我的变量finder.MessageId为空。

如何解决?
非常感谢!

+0

查找程序是否为空? – scheien

回答

2

你应该做的,是“构建查询”

var query = session.QueryOver<Message>(); 

if(finder.MessageId != null) // only in this case we will append the filter 
{ 
    query.Where(p => p.MessageId == finder.MessageId) 
} 

var list = query.List<StreetLight>(); 

的信息是可用的应用程序服务器上之前,我们必须去到SQL过程中检查传递的参数,所以我们没有将OR表达式传递给数据库引擎

+0

非常感谢你! – Artem

+0

伟大的,如果这有助于与NHiberante祝你好运;) –

相关问题