1

これを機能させたい:

DBSet コンストラクター:

dbset = DataContext().[Set](Of T)()

呼び出し: (Count & Page はページネーションに使用されるため、たとえば、最初の 20 の値については Count = 20 および Page = 1 です)。並べ替えは名前で行う必要があります

LeverancierService.GetLeveranciers(Function(el) el.Name, Count, Page)

C# で同等: LeverancierService.GetLeveranciers(el=> el.Name, Count, Page)

エラーが発生するメソッド (上記のパラメーター):

 Public Overridable Function GetAllPaged(orderby As Expression(Of Func(Of T, IComparable)), ByVal Count As Integer, ByVal Page As Integer) As IEnumerable(Of T)
      Return dbset.OrderBy(orderby).Skip((Page - 1) * Count).Take(Count).ToList()
 End Function

すでにこれに変更しようとしましたが、同じエラーが発生します:

 Public Overridable Function GetAllPaged(Of TOrderBy)(orderby As Expression(Of Func(Of T, TOrderBy)), ByVal Count As Integer, ByVal Page As Integer) As IEnumerable(Of T)
        Return dbset.OrderBy(orderby).Skip((Page - 1) * Count).Take(Count).ToList()
 End Function

エラー:

 Unable to cast the type 'System.String' to type 'System.IComparable'. LINQ to Entities only supports casting Entity Data Model primitive types.

これを行う方法はありますか?

追加情報:

私はDDD層のアプリケーションにいるので、呼び出されたメソッドがオーバーライドされたインターフェースであるため、パラメーターは同じままにする必要があります(たとえば、これを変更すると、VB.Netにあるため、これを200回ほど実行する必要がありますC# ではない (= 1 つの変更) )

4

1 に答える 1

1

これが私のサンプルです。問題が解決することを願っています:

dbsetのタイプが定義されていない場合:

Public Function Test(Of TEntity As Class, TKey) _
    (keySelector As Expression(Of Func(Of TEntity, TKey))) As IList(Of TEntity)
    Return DataContext.Set(Of TEntity).OrderBy(keySelector).ToList
End Function

使用法:

Repository.Test(Function(obj As MyEntity) obj.Name)

dbsetのタイプが定義されている場合は、次の別のサンプルを使用できます。

    Public Function Test2(Of TKey) _
        (keySelector As Expression(Of Func(Of MyEntity, TKey))) _
        As IList(Of MyEntity)
        Return DataContext.Set(Of MyEntity).OrderBy(keySelector).ToList
    End Function

次のように使用します。

Repository.Test(Function(obj) obj.Name)
于 2012-04-04T17:27:39.160 に答える