2012-08-14 47 views
1

我有兩個類在NHibernate中使用LInq時選擇了額外的列嗎?

Public class Foo 
{ 
    int Id {get;set;} 
    Email DefaultEmail {get;set;} 
} 

Public class Email 
{ 
    string main {get;set;} 
    string backup {get;set;} 
    string recover {get;set;} 
} 

Public string GetEmail(EnType) 
{ 
     switch(EnType) 
     { 
      Case EnType.Type1: 
       return this.main; 

      // others condition.... 
     } 
} 

我美孚映射使用組件映射到電子郵件。每次只需要一封電子郵件。

當我選擇

Session.Query.select(x => x.email.getEmail(EnType.Type1)) 

SQL生成是

select emailType1, emailType2,.... From Foo 

,而我只期望

select emailType1 From Foo 
+2

雖然這可能不是一個流行的答案,但linq到Nhibernate存在很多錯誤(嘗試連接),它會執行很多你不會期望的事情。如果你想控制NHibernate寫查詢的方式,我會推薦使用Criteria或QueryOver來獲得你想要的。 – 2012-08-14 07:03:27

回答

0

GetEmail(),其中位於電子郵件類別代碼被執行。你認爲nhibernate應該知道代碼應該做什麼?

它只是提取整個電子郵件類(組件),然後讓它決定要返回什麼。

+0

如果我想限制所選列的最佳方式是什麼? – Jec 2012-08-14 09:31:19

+0

您需要重新實現查詢中的邏輯並僅投影您實際需要的屬性 – Firo 2012-08-14 19:34:36

相關問題