2010-02-12 30 views
1

黑客更在我目前的應用程序後 - 再一次,我遇到了殺死一些喜悅我從我的域模型預期的問題。如果ID鍵不一致,如何獲取IEnumberable/IQueryable中的下一個對象?

的這裏的問題是,在我的域模型的aggregate root /最重要的類沒有一致的ID值的條目。 (延續搞砸了:1..3..5..12..150..157..等等|這是因爲它是因爲的MS Access 1997年正在更新,現在升遷到一個的MSSQLServer數據庫)。

有沒有辦法仍得到當前的集合(這意味着它不僅僅是基於其ID值)在real next對象?

什麼將你們建議我在這種情況下怎麼辦?

而且它是一個好主意:

  • 刪除ID字段和再生嗎?
  • 創建一些HelperMethods以獲取當前的下一個對象? (你將如何實現...?)

回答

2

即使有間隙,ID是否至少有序?如果是這樣,只需按ID排序並遍歷枚舉。如果您需要訪問過濾器中的下一個對象(例如),則可以使用擴展方法提供對集合中索引的訪問權限。

Ex。 1:

var query = db.Root.OrderBy(r => r.ID); 
foreach (var obj in query) 
{ 
    .... 
} 

Ex。 2:

var query = db.Root.Where((r,i) => db.Root.ElementAt(i).Name == r.Name); 
... 
+0

一個小問題,但: 如何確定,其中i爲(R,I)。我有一個IEnumerable,我的代碼現在迭代它。 我應該在我的ViewModel中創建一個字段,並在每次遍歷它時設置它? (int ItemNr)? – 2010-03-04 12:12:54

+0

爲什麼你需要知道你的ViewModel集合中的位置?我認爲你會將該項目的ID存儲在ViewModel中,並簡單地通過ID來檢索它:'db.Root.SingleOrDefault(r => r.ID == id)'或者用於鏈接到下一個項目的模型集合'db.Root.Where((R,I)=>新RootModel {ID = r.ID,NextID = db.Root.ElementAt第(i + 1)!= NULL?db.Root.ElementAt(I + 1)。 ID:null})' – tvanfosson 2010-03-04 12:44:26

相關問題