2016-12-10 61 views
0

我試圖實現IBindingListView,它可以與任何Linq查詢一起作爲數據源,但我堅持實施Find(PropertyDescriptor, Object)方法,該方法應該找到包含一些記錄的位置特定財產的價值。在Linq2Sql或實體框架查詢中查找記錄位置

我不想遍歷內存中的所有記錄。我想要數據庫來做到這一點。
不幸的是,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  | 

查找()StringProperty2 = 'value 2'應該返回1(0基於指數),但應該使用Linq來找到它它將在數據庫中執行。

如果將執行2或3個查詢,我沒有問題,但請不要假設我知道關於主鍵或特定Linq提供程序的任何信息。我們可以假設,如果Linq to SQL或Entity Framework能夠將某些東西轉換爲SQL,則可以使用它。

如何實現對任何Linq查詢作爲數據源的IBindingListView.Find()方法?

+0

但是,回到數據庫找到您可以輕鬆從本地列表中獲得的信息有點奇怪。 –

+0

@Arnold除非你有百萬條記錄要在網格中顯示,或者你的代碼位於不應該瞭解GUI分頁等內容的圖層中。 – SeeR

回答

0

您可以使用lambda表達式來捕獲行數據和行索引。 例如:

var query = youCollection 
      .Select((r, i) => new {Row = r, Index = i});