2016-10-28 55 views
1

我有一個SQL查詢,我試圖將其轉換成NHibernate的查詢,並運行它。轉換SQL查詢NHibernate的

SQL查詢

SELECT 
    A.* 
FROM 
    TestTable i 
LEFT JOIN 
    TestTable o 
ON 
    i.testColumn=o.testcolumn and i.testColumn1='TestColumn1'  
WHERE  o.StartDate <= '2016-10-28' and i.testColumn2 > 3 

Nhibertnate查詢

對象A是TestTable的

ObjectA o = null; 
ObjectA i = null; 

var query = Session.QueryOver(() => o) 
      .Left.JoinQueryOver(() => i) 
      .Where(() => o.testColumn == i.testColumn) 
      .Where(() => i.testColumn1 == "TestColumn1") 
      .Where(() => i.testColumn2 == 3 
      .Where(() => o.StartDate <= '2016-10-28') 
         return query.Take(100).List(); 

映象的C#對象版本

public ObjectATableMap : ClassMap<ObjectA> 
    { 
     Schema("[Test]"); 
     Table("[TestTable]"); 

     Id(x => x.Id, "Id").GeneratedBy.Native(); 
     Map(x => x.TestColumn1, "TestColumn1"); 
    Map(x => x.TestColumn2, "TestColumn2"); 
    Map(x => x.StartDate ,"StartDate"); 

     } 

當運行ABOV Ë查詢我得到以下信息 「無法解析屬性:我的:對象A」 誰能請我提供正確的Hibernate查詢。 感謝

+0

顯示映射 –

+0

'JoinQueryOver'預計與具有的關係的性質的表達式。你可以在這裏看到一個例子http://stackoverflow.com/a/5420791/1486443 – Najera

+0

@RadimKohler映射顯示 – Sike12

回答

1

錯誤:

"could not resolve property: i of: ObjectA"

有關聲明

Session.QueryOver(() => o) 
     .Left.JoinQueryOver(() => i) 

,因爲它預計,一個class ObjectA(O)具有參考class ObjectA(I)。通常父子

public class ObjectA 
{ 
    public virtual ObjectA Parent { get; set; } 
    ... 
} 

如果沒有關係 - 我們不能使用QueryOver API。我們可以使用HQL

這是不是很不錯的C#API爲QueryOver了,但它的工作。

+1

感謝@Radim科勒 – Sike12