2013-08-23 38 views
1

這是查詢:Session.QueryOver:這是什麼錯誤:?變量從範圍引用類型ReportingGroup的「RG」,但它沒有定義」的意思

var reportingGroupYears = _session.QueryOver<ReportingGroup>() 
          .Where(x => x.Number == request.ReportingGroupNumber) 
          .Select(rg=> rg.Year.ToString()) 
          .List<string>(); 

我不明白什麼是錯的定義'rg'爲字符串也是不允許的,因爲它給出的消息表明rg的含義與父範圍中定義的不同。

+2

爲什麼你需要投一年的字符串? – Rippo

+0

可以看到ReportingGroup的定義和請求嗎? – Apocatastasis

回答

1

在這種情況下,Select子句是NHibernate的一個問題。它期望屬性(在表達式樹解析期間)被轉換成SELECT語句。方法調用:.ToString()。如何解決這個問題

的一種方式,可以明確Projection這樣的(見文檔QueryOver 16.6. Projections

var reportingGroupYears = session 
    .QueryOver<ReportingGroup>() 
    .Where(x => x.Number == request.ReportingGroupNumber) 
    .Select(Projections.ProjectionList() 
     .Add(Projections.Cast(NHibernateUtil.String, Projections.Property("Year")) 
     )) 
     .List<string>(); 
相關問題