2012-04-19 114 views
2

我有10 000個元素的表格。獲取物品索引(rownum)

IQuerable<IEntity> query = dataRep.Get<IEntity>() 
            .Query(); 

我需要選擇obj指數(ROWNUM)沒有得到所有的表項

var obj = query.Where(x => x.Name == "testName") 
       .FirstOrDefault(); 

簡單的SQL做工精細:

select name, id, r from 
(
    select name, id, rownum r from collections order by id 
) where name = 'testName'; 

如何Linq中這樣做是爲了NHibernate?

編輯:

我試圖添加到IEntity類屬性RowNumber

<property name="RowNumber" formula="rownum" /> 

hbm映射此但經過

var index = query.Where(x => x.Name == "testName") 
        .Select(x => x.RowNumber) 
        .FirstOrDefault(); 

總是得到1

+0

我認爲甲骨文? 'rownum'基於結果集中行的位置,所以如果它在只返回一個結果的查詢的頂層調用,它只能等於'1'。 – 2012-04-19 13:25:54

+0

@Damien_The_Unbeliever。你是對的。如果block'where name ='testName''與'rownum'處於同一級別 - 結果總是爲'1' – Kronos 2012-04-19 13:36:49

+0

我必須刪除一個標籤才能添加Oracle - 我選擇了.NET,但是您可能擁有不同的意見;但是這要歸結爲NHbernate爲了產生特定於Oracle的特定SQL,所以真的需要這兩種技術之間的重疊,以期獲得一些專業知識。 – 2012-04-19 13:58:29

回答

1

你不能直接過濾查詢嗎?

IQuerable<IEntity> query = dataRep.Get<IEntity>() 
            .Query() 
            .FirstOrDefault(x => x.Name == "testName"); 

編輯:

爲了讓您可以伸進一個匿名類型的項目:

var query = (from data in dataRep.Get<IEntity>().Query() 
      where Name == "testName" 
      select new 
      { 
       id = data.id, 
       rowNumber = data.rowNumber 
      }).FirstOrDefault(); 
+0

我需要獲取物品的索引,而不是物品。 – Kronos 2012-04-19 10:28:58

+0

@Kronos - 編輯顯示如何投射到匿名類型中以獲取SQL中所述的id /行號。 – 2012-04-19 10:32:20

+0

'IEntity'對象不包含'rowNumber'屬性! data.rowNumber - 將編譯錯誤! – Kronos 2012-04-19 10:37:13