建议增加一个分页的方法。

Topics: Developer Forum, Project Management Forum, User Forum
Apr 20, 2010 at 8:36 AM

DbEntry.Context.ExecuteDataReader(new SqlStatement("cmdText"),
    reader 
=>
    
{
        
// read data
    }
);

建议增加一个:

DbEntry.Context.ExecuteDataReader(new SqlStatement("cmdText"), int PageSize, int curPage
    reader 
=>
    
{
        
// read data
    }
);
能直接把cmdText转换为分页的数据。

增加一个这个扩展,代码里都实现了,增加一个方法而已。最好能加到官方里。毕竟分页很常见。

Coordinator
Apr 20, 2010 at 10:58 AM

DbEntry里只有把类Linq的结构转换成SQL的方法,并没有解析SQL语句到类Linq的结构的方法,所以,不能直接把cmdText转换为分页的数据。

Apr 21, 2010 at 2:13 PM

我的意思是提供sql语句转换为分页申请了语句的方法。

比如是sqlite:

要分页的sql 语句是:var  sql=“ select * from Users ”

DbEntry.Context.ExecuteDataReader(new SqlStatement(sql), int PageSize, int curPage
    reader 
=>
    
{
        
// read data
    }
);

采用这个方法后,实际执行的sql语句是

sql=“select * from Users  limit ”+(curPage-1)*PageSize+1 +","+curPage*PageSize

DbEntry.Context.ExecuteDataReader(new SqlStatement(sql)
    reader 
=>
    
{
        
// read data
    }
);

sql ,oracle,等也是采用类似的。

这样就可以直接对sql语句进行分页了,这个加上,会方便很多。

Coordinator
Apr 22, 2010 at 2:06 AM

建议你查一下 Sql Server 2005/2008 和 Oracle 的分页语法。

如果只是 limit 的话,你自己合成也没有什么困难的了。

 

Apr 22, 2010 at 6:22 AM

我自己已经修改了,sql2000实现一个,sql2005\sql2008实现一个,oracle实现一个。我自己有修改代码实现了,支持sqlite,sql2000,05,08,oracle的。主要是官方版本里没有,每次你一升级,我又要自己改一次源码,所以建议加到官方版本里。

Coordinator
Apr 22, 2010 at 8:37 AM

我对它的通用性有点儿怀疑,不过,你可以通过下面的方法扩展,而不需要修改DbEntry的源代码,也就不需要每次升级又要改源码了:

DbEntry.Context.ExecuteDataReader(PageHelper.GetSqlStatement("cmdText", PageSize, curPage)
    reader =>
    {
        // read data
    });

Apr 23, 2010 at 5:37 AM
这样有一个问题,换数据库类型后,这块还需要修改代码。
Coordinator
Apr 23, 2010 at 9:16 AM

那就给 DbContext 写一个 Extension Method 嘛:

public static void ExecuteDataReaderByPage(this DbContext context, string cmdText, int pageSize, int curPage)
{
    context.Dialect.GetType() // 分析数据库类型
}

Apr 26, 2010 at 7:37 AM

想偷下懒,让你加框架里,来来去去皮球还是到我这里了.

我自己写扩展方法吧。谢谢了!