2014-11-05 59 views
0

我想填充包含两个不同表格的网格。所以我需要:ServiceStack.OrmLite加入跳过并采取Oracle数据库

1)加入两个表之间的功能。

2)跳过/取消限制结果。在表

我想用SqlExpression,因为它似乎是最支持ServiceStack.OrmLite来完成它的行

3)总计数。但是,当我执行Skip and Take时,它会返回“ORA-00918:不明确定义的列”,因为这两个表有一些具有相同名称的列。

的代码如下:

var dbCustomersQuery2 = db.From<USER>() 
.LeftJoin<USER, USERPROFILE>((user, profile) => user.Id == profile.USER_ID) 
.Where<USER>(user => user.USERNAME == "sangee.ram") 
.Where<USERPROFILE>(profile => profile.PROFILEID == 442); 
var result = db.Select<ViewModel>(dbCustomersQuery2.Skip(1).Take(5)); 

这里是堆栈跟踪:

at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) 
    at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck) 
    at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior) 
    at Oracle.DataAccess.Client.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior) 
    at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() 
    at ServiceStack.OrmLite.OrmLiteCommand.ExecuteReader() 
    at ServiceStack.OrmLite.OrmLiteReadCommandExtensions.ExecReader(IDbCommand dbCmd, String sql) 
    at ServiceStack.OrmLite.OrmLiteResultsFilterExtensions.ConvertToList[T](IDbCommand dbCmd, String sql) 
    at ServiceStack.OrmLite.OrmLiteReadCommandExtensions.SqlList[T](IDbCommand dbCmd, String sql, Object anonType) 
    at ServiceStack.OrmLite.OrmLiteReadExpressionsApi.<>c__DisplayClass10`1.<Select>b__f(IDbCommand dbCmd) 
    at ServiceStack.OrmLite.OrmLiteExecFilter.Exec[T](IDbConnection dbConn, Func`2 filter) 
    at ServiceStack.OrmLite.OrmLiteReadExpressionsApi.Exec[T](IDbConnection dbConn, Func`2 filter) 
    at ServiceStack.OrmLite.OrmLiteReadExpressionsApi.Select[T](IDbConnection dbConn, ISqlExpression expression, Object anonType) 
    at LO.Leads.UI.Tests.UserSecurityTests.CanQueryUserSecurity() in c:\Git\Cons.Orig.Lead\src\LO.Leads.UI\LO.Leads.UI.Tests\UserSecurityTests.cs:line 68 

回答

0

我注意到的第一件事情是,你属于跳跃,并采取最后的选择命令内,一旦我将其移出,不再有例外。

var userQuery = db.From<USER>() 
    .LeftJoin<USER, USERPROFILE>((user, profile) => user.Id == profile.USER_ID) 
    .Where<USER>(user => user.USERNAME == "sangee.ram") 
    .Where<USERPROFILE>(profile => Sql.In(profile.PROFILEID, new[] { 1, 441, 442, 452 })); 

var result = db.Select<ViewModel>(userQuery) 
    .Skip(1) 
    .Take(2); 

Assert.NotNull(result); 

当我运行此测试时,它返回2行(第2和第3)从可能的4行中。

希望这会有帮助, Stephen