2012-04-19 88 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