我无法转换我的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/

10-11 16:21