2010-05-13 75 views
-1

代码nHibernate独特查询

IList VendorList;

生成的查询,请帮我出

SELECT this_.Sp as HCO1_25_0_, 
     this_.NID as Network2_25_0_, 
     this_.Vname as HCO3_25_0_ 
FROM  HCO_V_Lookup this_ 
WHERE this_.NID = 5 /* @p0 */ 
     and not (this_.VNAME = ' ' /* @p1 */) 
ORDER BY this_.VNAME asc 
+0

这甚至不是一个问题 – 2010-05-13 14:41:29

回答

0
ICriteria criteria = session.CreateCriteria(typeof(Person)); 
criteria.SetProjection(
    Projections.Distinct(Projections.ProjectionList() 
     .Add(Projections.Alias(Projections.Property("FirstName"), "FirstName")) 
     .Add(Projections.Alias(Projections.Property("LastName"), "LastName")))); 

criteria.SetResultTransformer(
    new NHibernate.Transform.AliasToBeanResultTransformer(typeof(Person))); 

IList people = criteria.List(); 
0

我想你想知道为什么DISTINCT不会在SQL出现。这是因为它作为结果转换器应用于标准查询中 - 在查询运行后,SQL查询结果将被过滤以使它们不同。

+0

我改变了我的代码,现在我能够看到TRO的不同之处在 加入这个 .SetProjection(Projections.Distinct(Projections.ProjectionList()查询。加入( 。Projections.Property( “NetworkRunId”))添加(Projections.Property( “VENDORNAME”)))) 去除 .SetResultTransformer(新NHibernate.Transform.DistinctRootEntityResultTransformer() 我得到一个异常 ERROR: 值“System.Object []”不是类型“Common.In terface.Domain.Common.IVendorLookup“并且不能用于这个泛型集合。 参数名称:值 – bharat 2010-05-13 15:21:06

+0

我发现问题是当查询生成与DISTINCT我收到异常。 – bharat 2010-05-13 15:55:44

+0

如果我使用这个我只得到一个结果集 crit.SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer()); – bharat 2010-05-13 16:09:29