2012-02-21 64 views
2

我在Nhibernate3.1QueryOver錯誤:在表達值無法識別方法調用

var q = SessionInstance.QueryOver<Person>() 
     .Where(x => IsActive(x.PersonType) == true); 

return q.List<Person>(); 

有一個查詢由QueryOver通過這種方法:

private bool IsActive(PersonType type) 
{ 
    if(type == PersonType.Employee 
     return true; 
    else 
     return false; 
} 

現在它具有由該消息中的運行時錯誤:在表達值

無法識別方法調用

爲什麼?

回答

2

您的方法IsActive是直接編譯爲IL的方法。查詢分析器無法剖析此方法並從中建立查詢。我不知道如何從一個方法暴露一個表達式,並在NHibernate的查詢中使用它,但我相信谷歌可以幫助你。

1

你不能這樣做嗎?

var q = SessionInstance.QueryOver<Person>() 
     .Where(x => x.PersonType == PersonType.Employee); 
+0

號我想要在這個查詢中使用另一種方法。對我的例子來說'IsActive'方法是一個簡單的方法! – Ehsan 2012-02-21 14:14:59

+1

也許你應該包括你的更復雜的例子。 – 2012-02-21 14:30:51

+0

本着乾淨的代碼精神,不應該需要更復雜的例子。 IsActive比僅僅是謂詞更有意圖的揭示。 – wezzix 2016-02-15 15:29:19

4

我通過在我的謂詞方法中返回表達式樹而不是直接返回布爾值來解決了類似的問題。使用你的例子,它會是這樣的:

private Expression<Func<PersonType, bool>> IsActive() 
{ 
    return (t => t == PersonType.Employee); 
} 
+0

這是正確的答案。用法很簡單QueryOver ().Where(IsActive) 非常好。 – wezzix 2016-02-15 15:38:16

相關問題