我有一个分层的应用程序用C#编写 -排序依据的N层应用程序中使用DTO时
前端 - (获取的
Customers
页)业务 - (
CustomerService
和Customer
类)DataContracts - (
CustomerDTO
)数据访问 - (
UnitOfWork
和Repositories
)
该数据库有一个超过一百个列(许多冗余)的Customer表,因此我使用DTO在业务层上填充Customer对象。在Customer类中,我也更改了其数据库名称中的许多字段的名称,例如ID到客户ID,FName到名字。
前端使用业务层的服务来获取客户,例如, GetAll(), GetByID(int customerID).
我也想要提供像下面这样的GetPaged method
。
的CustomerService类
public IEnumerable<Customer> GetPaged(
Func<IQueryable<Customer>, IOrderedQueryable<Customer>> orderBy,
int skip,
int take)
{
foreach (var customerDTO in
unitOfWork.CustomerRepository.GetPaged(orderBy, skip, take))
{
yield return new Customer(customerDTO);
}
}
但由于CustomerRepository
是基于CustomerDTO
不是Customer
期待的orderBy
这是不行的。
我不想让前端知道关于CustomerDTO
的任何信息。
我该如何做到这一点?
一个方法得到这个工作将是使用动态OrderBy像[这里](http://stackoverflow.com/questions/41244/dynamic-linq-orderby),所以你可以通过列名参数化排序(字符串),也可以将它们映射到数据层中使用的名称。 – 2013-02-20 19:54:36
我已经尝试了一些方法,似乎是一个静态构造函数填充字典表示映射和翻译方法的字符串是唯一可行的方法。 – tom 2013-02-21 16:39:59
不要这么肯定,看看我更简单的答案。您不需要使用动态OrderBy来使事情更复杂。 – kzfabi 2013-03-05 17:38:19