2014-03-01 24 views
1

請參閱下面的代碼:實體框架:重載決策失敗,因爲沒有可訪問ORDERBY可以用這些參數調用

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的新手。

回答

0

實體框架不足以處理指定爲字符串的排序條件。 OrderBy的調用需要一個表達式,而不是一個字符串。表達需要的對象,併產生映射到列的表達式在其上的輸出進行排序:

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

此外,不能指定如果排序將被提升或在排序表達式降序:用於排序按升序排列使用OrderBy;按降序排序使用OrderByDescending

0

OrderBy需要一個Expression參數,而不是一個字符串。什麼,你應該寫的是:

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

降序:

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

這說明實體框架由會員類的成員Id屬性命令(我假定各位屬性是會員可查詢) 。 當然,那麼您必須重寫GetMembers()方法,以便將您傳遞給它的sortExpression轉換爲有效的.Net表達式。

相關問題