Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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

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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
实体框架4.1:Linq到实体与排序不兼容_Linq_Entity Framework - Fatal编程技术网

实体框架4.1:Linq到实体与排序不兼容

实体框架4.1:Linq到实体与排序不兼容,linq,entity-framework,Linq,Entity Framework,我使用以下排序方法: public static IEnumerable<TEntity> OrderBy<TEntity>(this IEnumerable<TEntity> source, string orderByProperty, bool desc) { string command = desc ? "OrderByDescending" : "Ord

我使用以下排序方法:

    public static IEnumerable<TEntity> OrderBy<TEntity>(this IEnumerable<TEntity> source, string orderByProperty,
                                bool desc)
    {
        string command = desc ? "OrderByDescending" : "OrderBy";
        var type = typeof(TEntity);
        var property = type.GetProperty(orderByProperty);
        var parameter = Expression.Parameter(type, "p");
        var propertyAccess = Expression.MakeMemberAccess(parameter, property);
        var orderByExpression = Expression.Lambda(propertyAccess, parameter);
        var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType },
                                      source.AsQueryable().Expression, Expression.Quote(orderByExpression));
        return source.AsQueryable().Provider.CreateQuery<TEntity>(resultExpression);
    }
执行时:

context.MyEntities.OrderBy(sort, direction != "ASC").Skip(10).Take(10).ToList();
(请注意,sort是我排序所依据的字段的名称,在本例中为PropertyA。)

我的问题是OrderBy方法正在引发异常,并指出LINQ to实体中不允许指定“PropertyA”类型的成员:只允许初始值设定项、实体成员和导航属性


有什么想法吗?

您不能在数据库查询中使用
[NotMapped]
属性,因为该属性在数据库中不存在


相反,您可以调用
.AsEnumerable()
(在
OrderBy
之前)强制在客户端上运行查询。

您不能在数据库查询中使用
[NotMapped]
属性,因为该属性在数据库中不存在


相反,您可以调用
.AsEnumerable()
(在
OrderBy
之前)强制在客户端上运行查询。

我需要不映射此属性,因此添加了.AsEnumerable()在OrderBy之前但未成功:出现相同的错误消息。@user1624552:这可能是由重载的
OrderBy
AsQueryable().Provider.CreateQuery…
部分导致的,该部分再次将查询转换为LINQ to实体。无论如何,您最好考虑按不同的属性进行排序(除非表很小),因为
AsEnumerable
将导致将整个表加载到内存中。您这么说是因为执行context.myenties.AsEnumerable().OrderBy(sort,direction!=“ASC”).Skip(10).Take(10).ToList();正在将整个表加载到内存中吗?如果是这样,我不希望这样,如果我无法将此属性从NotMapped更改为mapped,并且我必须按此字段排序。。。如何做到这一点?不可能吗?@user1624552:您希望EF如何使用服务器上不存在的属性在服务器上运行查询?@user1624552:调用
Expression.Compile()
创建委托,然后调用
.OrderBy()
OrderByDescending()
直接。我需要不映射此属性,因此我在OrderBy之前添加了.AsEnumerable(),但没有成功:出现了相同的错误消息。@user1624552:这可能是由于重载的
OrderBy
AsQueryable().Provider.CreateQuery…
部分导致的,该部分将查询再次转换为LINQ to实体。无论如何,您最好考虑按不同的属性进行排序(除非表很小),因为
AsEnumerable
将导致将整个表加载到内存中。您这么说是因为执行context.myenties.AsEnumerable().OrderBy(sort,direction!=“ASC”).Skip(10).Take(10).ToList();正在将整个表加载到内存中吗?如果是这样,我不希望这样,如果我无法将此属性从NotMapped更改为mapped,并且我必须按此字段排序。。。如何做到这一点?不可能吗?@user1624552:您希望EF如何使用服务器上不存在的属性在服务器上运行查询?@user1624552:调用
Expression.Compile()
创建委托,然后直接调用
.OrderBy()
OrderByDescending()
context.MyEntities.OrderBy(sort, direction != "ASC").Skip(10).Take(10).ToList();