nhibernate queryover.where对象引用未设置为对象的实例

时间:2014-01-06 14:52:52

标签: c# linq nhibernate lambda

我无法转换我的SQL代码:

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为空。

如何解决? 非常感谢!

1 个答案:

答案 0 :(得分: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表达式传递给数据库引擎