2014-01-06 134 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祝你好運;) –

相關問題