实体框架:重载解析失败,因为无法使用这些参数调用可访问的ORDERBY

时间:2014-03-01 11:18:58

标签: vb.net entity-framework

请参阅以下代码:

Public Function GetMembers(Optional ByVal sortExpression As String = "MemberId ASC") As List(Of Member) 'Implements IMemberDao.GetMembers
        Using context = New LibraryDBEntities()
            Dim members = context.Members.AsQueryable.OrderBy(sortExpression).ToList
            Return Mapper.Map(Of List(Of MemberEntity), List(Of Member))(members)
        End Using
    End Function

我得到的错误是:“重载解析失败,因为无法使用这些参数调用可访问的ORDERBY”。我是Entity Framework的新手。

2 个答案:

答案 0 :(得分:0)

OrderBy需要一个Expression参数,而不是一个字符串。你应该写的是:

context.Members.AsQueryable().OrderBy(m => m.MemberId);

降序:

context.Members.AsQueryable().OrderByDescending(m => m.MemberId);

这告诉Entity Framework按Member类的MemberId属性排序(我假设Members属性是Member的Queryable)。 当然,那么你必须重写GetMembers()方法,以便将传递给它的sortExpression转换为有效的.Net Expression。

答案 1 :(得分:0)

实体框架不够动态,无法处理指定为字符串的排序条件。调用OrderBy需要表达式,而不是字符串。表达式接受一个对象,并生成一个表达式,该表达式映射到要对输出进行排序的列:

Dim members = context.Members.AsQueryable.OrderBy(Function(member) member.MemberId).ToList

此外,您无法指定排序表达式中的排序是升序还是降序:对于按升序排序,请使用OrderBy;按降序排序使用OrderByDescending