我无法转换我的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
为空。
如何解决? 非常感谢!
答案 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表达式传递给数据库引擎