2016-12-10 7 views
0

IBindingListViewを実装していますが、Linqクエリをデータソースとして使用できますが、レコードの位置を見つける必要があるFind(PropertyDescriptor, Object)メソッドの実装に固執しています。特定のプロパティの値。Linq2SqlまたはEntityフレームワーククエリのレコード位置を見つける

メモリ内のすべてのレコードを繰り返し処理する必要はありません。私はデータベースがそれをやりたい。
残念ながら、Linqはrow_number()SQL関数をサポートしていないため、順序付けとフィルタリングを保持しながら他の方法では行えません。言い換えれば

class Entity 
{ 
    public string StringProperty {get; set;} 
    public int IntProperty {get; set;} 
    public string StringProperty2 {get; set;} 
} 

|StringProperty | IntProperty | StringProperty2| 
|ccc   | 102   | value 2  | 
|aaa   | 100   | value 0  | 
|ddd   | 103   | value 3  | 
|aaa   | 101   | value 1  | 

とクエリ

var query = from e in Entities 
      where e.IntProperty > 100 
      orderby e.StringProperty 

考える

くれ

|StringProperty | IntProperty | StringProperty2| 
|bbb   | 101   | value 1  | 
|ccc   | 102   | value 2  | 
|ddd   | 103   | value 3  | 
を与える検索()1(0から始まるインデックスを返す必要があり StringProperty2 = 'value 2'引数付き)が、Linqを使って見つかるはずですそれはデータベースで実行されます。

2つまたは3つのクエリが実行される場合は問題はありませんが、プライマリキーまたは特定のLinqプロバイダについて何か知っていると仮定しないでください。 Linq to SQLまたはEntity Frameworkが何かをSQLに変換することができるのであれば、それを使用することができます。

どのようにデータソースとしてLinqクエリで動作するIBindingListView.Find()メソッドを実装できますか?

+0

しかし、ローカルリストから簡単に入手できるものを見つけるためにデータベースに戻るのはちょっと変です。 –

+0

@Arnoldグリッドに表示したいレコードがたくさんある場合や、GUIページングなどについて知らないレイヤーにコードがある場合を除き – SeeR

答えて

0

キャプチャ行データと行インデックスにラムダ式を使用できます。 例:

関連する問題