111,129
社区成员
发帖
与我相关
我的任务
分享 // 需要查询用到的实体
BUser user = new BUser();
// 使用 OQLCompareFun 委托,完成查询条件的复用
OQLCompareFunc cmpFun = cmp =>
{
// 此处构造复杂的Where条件
OQLCompare cmpResult = cmp.Comparer(user.BUserID, OQLCompare.CompareType.GreaterThanOrEqual, 20)
& cmp.Comparer(user.BUserID, OQLCompare.CompareType.LessThanOrEqual, 40);
return cmpResult;
};
int maxCount =
Convert.ToInt32(EntityQueryAnonymous.ExecuteOQLCount(
OQL.From(user).Select().Where(cmpFun).OrderBy(user.BUserID,"ASC").END,
MyDB.GetDBHelper()
)
);
// 构造分页查询的对象
OQL qq = OQL.From(user)
.Select()
.Where(cmpFun)
.END
.Limit(5,2);
qq.PageWithAllRecordCount = maxCount;
// 以返回DataTable为例
DataTable dt = EntityQueryAnonymous.EntitysToDataTable(
EntityQuery<BUser>.QueryList(qq));
/// <summary>
/// 取得记录总数
/// </summary>
/// <param name="cp">where条件</param>
/// <returns></returns>
public static int GetRecordCounts<T>(OQLCompareFunc<T> cp,AdoHelper ado) where T : EntityBase, IIntID, new()
{
T m = new T();
OQL q = new OQL(m);
if ((object)cp != null)
{
q.Select().Count(m.ID, "Counts").Where(cp);
}
else
{
q.Select().Count(m.ID, "Counts");
}
T mCounts = EntityQuery<T>.QueryObject(q,ado);
return Convert.ToInt32(mCounts.PropertyList("Counts"));
}
/// <summary>
/// 取得记录总数
/// </summary>
/// <param name="cp">where条件</param>
/// <returns></returns>
public static int GetRecordCounts<T>(OQLCompare cp) where T : EntityBase, IIntID, new()
{
T m = new T();
OQL q = new OQL(m);
if ((object)cp != null)
{
q.Select().Count(m.ID, "Counts").Where(cp);
}
else
{
q.Select().Count(m.ID, "Counts");
}
T mCounts = EntityQuery<T>.QueryObject(q);
return Convert.ToInt32(mCounts.PropertyList("Counts"));
}
然后在需要的地方调用:
OQLCompareFunc<Entity.LT_Banner> fun = (cmp, u) =>
{
cmp = cmp.Comparer(u.IsDelete, "=", false);
return cmp;
};
int total = BLL.CURD.GetRecordCounts<Entity.LT_Banner>(fun);
最后在获取列表处传人记录总数就行了:
List<Entity.LT_Banner> list = OQL.FromObject<Entity.LT_Banner>().Select().Where(fun).OrderBy((o, u) => o.Desc(u.ID)).Limit(pageSize, page, total).ToList();
OQL qPage = OQL.From(user)
.Select()
.Where(cmpFun)
.OrderBy(user.Name)
.END;
qPage.Limit(10,100,true) ;//自动求取记录总数
var list=EntityQuery<User>.QueryList(qPage);
int allCount =qPage.PageWithAllRecordCount;
OQL qq = OQL.From(user)
.Select()
.Count(user.ID,"")
.Where(cmpFun)
.END
var countUser=EntityQuery<User>.QueryObject(qq);
var count = countUser.ID;
然后,将这个记录数给你的OQL分页语句:
OQL qPage = OQL.From(user)
.Select()
.Where(cmpFun)
.END;
qPage.PageWithAllRecordCount=count;
qPage.Limit(10,100);
var list=EntityQuery<User>.QueryList(qPage);