2012-06-18 15 views
0

我有几个实现公共库接口类,在这些类中的方法之一是,返回分页结果的方法,并采取了在EF排序与资源库和服务层

Expression<Func<T, bool>> OrderBy 

我还创建了一个使用存储库类的服务层,因为我已经读过它不希望从UI发送表达式对象到服务层,所以我决定将它作为参数发送,如果我将它作为字符串发送参数的名称如何将字符串转换为要在Expression对象中使用的属性,例如,假设我有一个名为User的实体,并向该方法发送了一个名为“UserName”的参数,我该如何转换“用户名”为turne d转换为可以在Expression> OrderBy对象中使用的“UserName”属性?

如果可能,请您告诉我一个更合适的方法来做排序?

+0

我没有看到任何理由不使用表达式。 – mfussenegger

+0

您提供的接口更多地用于Where子句而不用于排序。一个排序表达式应该是这样的:Expression > keySelector,bool asc ... –

+0

我已经记住了bool asc,order by参数(KeySelection)是用于排序的顺序,我目前试图使用表达式类从字符串构建一个orderby参数。 –

回答

0

而不是接收Expression<Func<T, bool>>您的服务可能会收到Func<IQueryable<T>, IQueryable<T>>这是更灵活(启用任何LINQ,不只是在哪里),并且不需要额外的表达式工作。

如果您想防止滥用(例如代码注入),则请将枚举(或字符串)(包含sortby参数)传递给服务,并让您的服务相应地构建查询。

我希望通过用户界面,您不是指实际的用户界面,而是指虚拟机或控制器,并且您的视图不知道其下方的任何内容。

+0

我会改变我的服务层代码接受一个字符串或枚举的顺序和通过表达式类我会建立顺序谓词,至于用户界面是指的是控制器,因为我暂时我会去ASP.Net MVC –