2011-04-19 84 views
0
public IEnumerable GetActive() 
{ 
    return Session.CreateQuery("from Agency where active=true order by agencyname").List(); 
} 

很明显,我可以在查询本身进行排序,但之后做什么呢?我只想对这里返回的IEnumerable进行排序。我可以在foreach循环中使用结果,但我没有标准列表集合中的可用功能(例如使用LINQ对数据进行排序)。对此进行排序的最佳方法是什么?排序NHibernate的查询结果

编辑:这工作,并保留使用的foreach的能力:

public IEnumerable<Agency> GetActive() 
{ 
    return Session.CreateQuery("from Agency where active=true order by agencyname").List<Agency>(); 
} 

foreach (Agency agency in agencies.OrderBy(c=>c.AgencyId)) { ... } 
+0

我实际上在几分钟前试过,“源不是IEnumerable <>” – Chris 2011-04-19 17:00:42

+0

你使用的是什么版本的NHibernate? – mxmissile 2011-04-19 17:07:38

+0

NHibernate.dll的版本是3.0.0.4000。 – Chris 2011-04-19 17:10:48

回答

3

你需要返回映射到此表的实体的强类型列表

public IEnumerable<Agency> GetActive() 
{ 
    return Session.CreateQuery("from Agency where active=true") 
    .List<Agency>().orderby(c=>c.agencyname); 
} 
+0

我之前试过这个问题,但我得到一个错误:“接口'System.Collections.IEnumerable'没有类型参数” – Chris 2011-04-19 16:56:13

+0

返回Session.CreateQuery(“从代理机构其中活动=真正的订单机构名称”)列表( );那么:foreach(代理机构代理.OrderBy(C => c.AgencyId)){工作 – Chris 2011-04-19 17:24:17

+2

啊,它之前没有显示的原因是因为我没有导入System.Collections.Generic,只是System.Collections。通常,resharper选择这种东西。 – Chris 2011-04-19 17:31:24

0

您可以转换IENumerable与ToList()方法,然后排序。