public static PageData GetPageList(int pageSize, int curPage,Mer m)
{
//m :当前登录的用户
List<ComOrder> o = DataAccess.GetAllList();//
List<ComOrder> n = new List<ComOrder>();//分中心数据
List<ComOrder> nn = new List<ComOrder>();//用户数据
if (m.MerType.Data == "分中心")
{
foreach (ComOrder c in o)
{
if ( m.Merchants.Contains(c.Subcenter))
{
n.Add(c);
}
}
}
else
{
foreach (ComOrder c in o)
{
if (c.JoiningTrader.Id == m.Id)
{
n.Add(c);
}
}
}
PageData pageData = new PageData();
pageData.PageSize = pageSize;
pageData.CurPage = curPage;
pageData.RecordCount = 0;
pageData.PageCount = 1;
int first = (curPage - 1) * pageSize + 1;
int last = curPage * pageSize;
foreach (ComOrder c in n)
{
pageData.RecordCount++;
if (pageData.RecordCount >= first && last >= pageData.RecordCount)
{
ComOrder comOrder = c;
nn.Add(comOrder);
}
}
if (pageData.RecordCount > 0)
pageData.PageCount = Convert.ToInt32(Math.Ceiling((double)pageData.RecordCount / (double)pageSize));
pageData.PageList = nn;
return pageData;
}
这样效率很慢 我能想明白问题 但是优化的时候越想越头疼,麻烦大神了
你这段代码写的逻辑有问题,应该做为条件去数据库查询数据,而不是先把数据全部拉到内存再去操作完分页
偶的灵感来源于你
@玉赛: 拉到内存里做逻辑的数据一定是经过筛选的,不然一整张表拉下来,如果里面数据量很大慢是必然的
@Rich.T: 但是我还是有一点没想明白呢,我的表并没有明确表示这条数据属于谁,只是根据登录人来划分的,这个表每条数据有商户的ID列也有分中心的ID列,我怎么破
@玉赛: 比如你的表有商户ID和分中心的ID,你的登录用户肯定属于某一个商户ID和分中心ID
select * from 表 where exists(select 1 from 商户表 where user_id=登录用户.id)
我这样说你可看得明白
@Rich.T: 明白了 你是让我先去判断是否商户还是分中心 然后根据ID去搜罗他家数据吗
@玉赛: 找到表之间的关系,用子查询或是联表查询
@Rich.T: 刚查了下exists 不好意思差点领会错,我拿着条件去碰看看对不对
@Rich.T: 谢谢你
@玉赛: 非常感谢
把你查询的所有逻辑移到db上就完了。这种逻辑你代码优化的再好也就微秒级的提升,你把分页及相关join操作拿到db上去完成那就是秒级的提升了。