【问题标题】:Sorting NHibernate query results对 NHibernate 查询结果进行排序
【发布时间】:2011-04-19 16:47:01
【问题描述】:
public IEnumerable GetActive() 
{
   return Session.CreateQuery("from Agency where active=true order by agencyname").List();
}

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

编辑:这行得通,并保留了使用 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)) { ... }

【问题讨论】:

  • 其实我几分钟前就试过了,“source is not IEnumerable”
  • 您使用的是哪个版本的 NHibernate?
  • NHibernate.dll 上的版本是 3.0.0.4000。
  • 我的代码错了。请参阅 mBotros 的回答。

标签: c# linq nhibernate sorting


【解决方案1】:

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

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

【讨论】:

  • 我在问之前试过这个,但我得到一个错误:“接口'System.Collections.IEnumerable'没有类型参数”
  • return Session.CreateQuery("from Agency where active=true order by agencyname").List();然后:foreach(代理机构中的机构机构。OrderBy(c=>c.AgencyId)){工作
  • 啊,之前没有出现是因为我没有导入System.Collections.Generic,只是导入System.Collections。通常,resharper 会选择这种东西。
【解决方案2】:

您可以使用 ToList() 方法将 IENumerable 转换为 LIst,然后进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    相关资源
    最近更新 更多