我无法转换我的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
不为null,则正常工作。但是我收到异常“对象引用未设置为对象的实例”。如果我的变量finder.MessageId
为null。如何解决?
非常感谢!
最佳答案
您应该做的是在“查询构建”过程中检查传递的参数
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>();
该信息可在App服务器上获得,而不必使用SQL,因此不必将OR表达式传递给数据库引擎。
关于c# - nhibernate queryover.where对象引用未设置为对象的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20952593/