代码之家  ›  专栏  ›  技术社区  ›  JOBG

如何将HQL结果转换为List<T>,其中T是映射类

  •  1
  • JOBG  · 技术社区  · 16 年前

    我有个问题:

    var q =
                   NHibernateSession.Current.CreateSQLQuery
                   (
                        @"SELECT  LastestEvents.*
                        FROM    (
                                SELECT  DISTINCT SbQcontainer.Container
                                FROM    HistoricEvents
                                SbQcontainer WHERE SbQcontainer.LineCompany_Id = :lineCompany) as Sbq
                                 JOIN HistoricEvents as  LastestEvents
                        ON      LastestEvents.id = (
                                SELECT TOP(1) id
                                FROM    HistoricEvents mi
                                WHERE   mi.Container = Sbq.Container and mi.LineCompany_Id = :lineCompany
                                ORDER BY mi.Date DESC
                                )"
                   ).SetResultTransformer(Transformers.AliasToBean(typeof(HistoricEvent)));
    
                q.SetParameter("lineCompany",lineCompany.Id);
                q.SetCacheable(false);
    
                var results = q.List<HistoricEvent>().ToList();
    

    .SetResultTransformer(Transformers.AliasToBean(typeof(HistoricEvent)));
    

    但是没有找到xception:Could not 在类“HistoricEvent”中查找属性“Event\u Id”的setter。

    提前打电话。

    1 回复  |  直到 16 年前
        1
  •  4
  •   DanP    16 年前

    假设HistoricEvent是一个映射的实体,下面应该会给出您要查找的内容:

    var q = 
                   NHibernateSession.Current.CreateSQLQuery 
                   ( 
                        @"SELECT  LastestEvents.* 
                        FROM    ( 
                                SELECT  DISTINCT SbQcontainer.Container 
                                FROM    HistoricEvents 
                                SbQcontainer WHERE SbQcontainer.LineCompany_Id = :lineCompany) as Sbq 
                                 JOIN HistoricEvents as  LastestEvents 
                        ON      LastestEvents.id = ( 
                                SELECT TOP(1) id 
                                FROM    HistoricEvents mi 
                                WHERE   mi.Container = Sbq.Container and mi.LineCompany_Id = :lineCompany 
                                ORDER BY mi.Date DESC 
                                )" 
                   ).AddEntity(typeof(HistoricEvent)); 
    
                q.SetParameter("lineCompany",lineCompany.Id); 
                q.SetCacheable(false); 
    
                var results = q.List<HistoricEvent>().ToList(); 
    

    看到了吗 relevant documentation 更多细节。

    推荐文章