2012-04-04 16 views
1

に動作していない私は、この作業を取得したいのですが実行する:のOrderBy Linq.Expression LinqToEntityが

DBSetコンストラクタ:

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

コール:(ページ番号&はページ番号付けに使用されるため、たとえば最初の20個の値についてはCount = 20、Page = 1など)。 C#で名前

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

当量であるべきでソート:エラーを与える LeverancierService.GetLeveranciers(EL => el.Name、カウント、ページ)

メソッド(パラメータは上記に示す):

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にあり、C#(= 1変更)ではなく、200回程度です)

+0

あなたのdbsetに関するデータを追加できますか?あなたのdbsetはどのように定義されていますか?このような? :DataContext.Set(Of TEntity)? –

+0

プライベートReadOnly dbsetとしてIDbSet(Of T) – NicoJuicy

+0

dbset = DataContext()。[Set](Of T)() – NicoJuicy

答えて

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) 
+0

奇妙な。関数の私の2番目の解決策(私によると)は完全に似ていた。あなたはそれをテストしましたか? – NicoJuicy

+0

自分のプロジェクトの1つからコピーされました。すぐに私の回答を更新し、プロジェクトの実際のコードを追加します。 –