1

我有以下架构:

DAL (NHibernate) -> BLL -> WCF (http) -> Clients 

客户对域模型一无所知。WCF 使用 DTO 对象与客户端通信。

其中一个客户端是一个网站 (ASP.NET MVC),它的网格很少。我需要为此网格实现排序。排序应该在服务端实现,因为客户端只接收请求的部分数据(分页)。

做这个的最好方式是什么?现在,我有两种方法似乎不太好。

  1. 为每个实体的每个属性制定服务合同的单独排序方法(在我的情况下为 36)
  2. 使用大量反射制作通用排序方法并从客户端接收魔术字符串(属性名称,方向)。

提前感谢您的帮助。

4

2 回答 2

2

如果您在 DAL 中使用 NHibernate,我建议您通过属性名称进行排序,然后使用 Criteria api 查询数据,您可以轻松添加属性以进行排序,而无需使用反射。想到为相同的数据使用 36 种不同的方法只是为了更改排序顺序,我感到畏缩......

于 2012-06-21T17:43:50.607 回答
1

好的,就我而言,我找到了最好的解决方案——Dynamic LINQ to NHibernate。 http://nhforge.org/blogs/nhibernate/archive/2011/11/17/dynamic-linq-to-nhibernate.aspx

var elist = session.Query<MyEntity>()
          .OrderBy(“Name descending”)
          .Skip(first)
          .Take(count)
          .ToList();

此外,OData 似乎是一个好方法,但我没有时间更改现有的项目结构。

IQueryable根据 Criteria api - 如果它有办法返回而不是IList为了与 LINQ 兼容,那就太好了。我不想将它用作默认查询引擎。

谢谢大家。你帮我知道一些新的东西!

于 2012-06-22T15:58:29.470 回答