Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用存储库和服务层在EF中进行排序_C#_Entity Framework_Repository_Service Layer - Fatal编程技术网

C# 使用存储库和服务层在EF中进行排序

C# 使用存储库和服务层在EF中进行排序,c#,entity-framework,repository,service-layer,C#,Entity Framework,Repository,Service Layer,我有几个类实现了一个公共存储库接口,这些类中的一个方法是返回分页结果并接受 Expression<Func<T, bool>> OrderBy Expression OrderBy 我还创建了一个服务层,它将使用存储库类,正如我所读到的,不希望将表达式对象从UI发送到服务层,所以我决定将其作为参数发送,如果我将其作为包含参数名称的字符串发送,如何将该字符串转换为表达式对象中要使用的属性,例如,假设我有一个名为User的实体,并向该方法发送一个名为“UserName”的

我有几个类实现了一个公共存储库接口,这些类中的一个方法是返回分页结果并接受

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


如果可能的话,您能告诉我一种更合适的排序方式吗?

您的服务可以接收
Func
,而不是接收
Expression,它更灵活(支持任何LINQ,而不仅仅是在哪里),并且不需要表达式所做的额外工作

如果要防止误用(例如代码注入),则将枚举(或字符串)(包含sortby参数)传递给服务,并让服务相应地生成查询


我希望通过UI,您不是指实际的UI,而是指VM或控制器,并且您的视图不知道它们下面的任何内容。

我看不出有任何理由不使用该表达式。您提供的接口更多地用于Where子句,而不是用于排序。排序表达式应该是这样的:expression keySelector,bool asc…我已经记住了bool asc,orderby参数(KeySelection)是用于排序的,我目前正在尝试使用expression类从字符串构建orderby参数。库已经做到了“从字符串构建orderby”。源代码也可用。我将更改我的服务层代码,以接受order by和through表达式类的字符串或枚举。我将构建order by谓词,至于UI是指控制器,因为我将暂时使用ASP.Net MVC