挪动端小效用——置顶、主动排序

置顶,是改变原有的一一,将一部分项固定在顶部地点,能够说是另一种积极排序(有稍许意况下,置顶是排序那几个大功用下的子作用)。哪些地点有只怕会有置顶的急需吗?

输入参数是一个分页的数据集合,那时你的ExecuteSqlCommand方法接入的聚集参数将是一个分了页之后的小集合,呵呵。

当前多用在类似列表的页面,比如微信首页聊天音讯置顶(即时通信),和讯中的置顶(社交),本身定制的股票行情列表(金融行情)。和讯的置顶越来越多的是一种社交属性上的作用,和另两者差距较大,就不在那里分析。

再次回到目录

唯其如此置顶一项,若再次置顶则原置顶项到首个的职责,没有裁撤置顶,可径直删除(蚂蚁聚宝)

对此大数据量提交,包含插入,更新和删除,我一贯不提出用EF自带的方法,因为它会大增与数据库的并行次数,一般地,EF的一个上下文在付出时会打开一个数码连接,然后把转互换的SQL语句一条一条的发到数据库端,然后去付出,试想,如果你的数据量达到万级别(更毫不说百万,千万数码了),那对数据库的压力是很大的,所以,我将EF批量操作语句举办了改版,并起名为BulkInsert,BulkUpdate和BulkDelete,事实上,在自家前边的版本中并从未关联到批次提交的概念,直到蒙受了实际上的标题,当您选用BulkInsert时,如若数量达到4万事先,那在SQL的解说时,也是很有压力的,有多情况下会晚点,当然那与你的数据库服务器有关,但为了品质与安全,我可能决定将Bulk操作变为分批交付,即将4W举办解释,分用1W数据量提交一回,那样,对数据库的下压力就小片段。看看我的改版吧。

长按永远突显“删除、置顶”(包蕴被置顶项),会改变各种,不出现裁撤置顶(牛股王)

大家可以见到,改版后的法子,没有直接把集合item传递给方法ExecuteSqlCommand去实践,而去调用了一个主意,那一个法子然后传入一个信托,然那么些委托的

可置顶多项,打消置顶后,会移动到置顶项下第四个(大智慧)

回去目录

置顶,百度给的分解是:顾名思义,就是放在顶处。

 

马上通信类的置顶和场常见金融列表(比如自选股票)的置顶,不相同在于即时通信会不断有最新的项。下边是多少个APP的置顶功用:

    #region Fields
        /// <summary>
        /// 数据总数
        /// </summary>
        int DataTotalCount = 0;

        /// <summary>
        /// 数据总页数
        /// </summary>
        int DataTotalPages = 0;

        /// <summary>
        /// 数据页面大小(每次向数据库提交的记录数)
        /// </summary>
        int DataPageSize = 10000;
        #endregion

列表编辑功能如图:

     public void BulkInsert(IEnumerable<TEntity> item)
        {
            DataPageProcess(item, (currentItems) =>
            {
                ((IObjectContextAdapter)_Db).ObjectContext.CommandTimeout = 0;//永不超时
                _Db.Database.ExecuteSqlCommand(DoSQL(currentItems, SQLType.Insert));
            });
        }

        public void BulkDelete(IEnumerable<TEntity> item)
        {
            DataPageProcess(item, (currentItems) =>
            {
                ((IObjectContextAdapter)_Db).ObjectContext.CommandTimeout = 0;//永不超时
                _Db.Database.ExecuteSqlCommand(DoSQL(currentItems, SQLType.Delete));
            });
        }
     public void BulkUpdate(IEnumerable<TEntity> item)
        {
            DataPageProcess(item, (currentItems) =>
            {
                ((IObjectContextAdapter)_Db).ObjectContext.CommandTimeout = 0;//永不超时
                _Db.Database.ExecuteSqlCommand(DoSQL(currentItems, SQLType.Update));
            });
        }

        /// <summary>
        /// 分页进行数据提交的逻辑
        /// </summary>
        /// <param name="item">原列表</param>
        /// <param name="method">处理方法</param>
        /// <param name="currentItem">要进行处理的新列表</param>
        private void DataPageProcess(IEnumerable<TEntity> item, Action<IEnumerable<TEntity>> method)
        {
            if (item != null && item.Count() > 0)
            {
                DataTotalCount = item.Count();
                this.DataTotalPages = item.Count() / DataPageSize;
                if (DataTotalCount % DataPageSize > 0)
                    DataTotalPages += 1;
                for (int pageIndex = 1; pageIndex <= DataTotalPages; pageIndex++)
                {
                    var currentItems = item.Skip((pageIndex - 1) * DataPageSize).Take(DataPageSize).ToList();
                    method(currentItems);
                }
            }
        }

起名“主动排序”是想差别于广大通过筛选标准让动用自动排序的效用,那里的积极排序只代表用户可以对所有显示项举办排序的情事。

对于几次提交的数码,你可以在类中去定义,它就像于分页,所以,我平日叫这些办法为数据分页提交!

编制功用里的宏图和置顶成效的安排性是应和的,iOS系统的拖动也是那种按住拖动的艺术,系统层的互相须求多多学习。

一经您指望赢得BlukInsert的完全方法,请关切我的EF架构系列

不出现裁撤置顶的预设:不会冒出打消置顶的必要,不想把这一项置顶时或然更须要的是直接删除

两种做法对应二种情景如若,可是哪种更合乎情理,我还无法很好地理清楚,此处需要多少统计和行事分析(复杂的是,那类列表日常都还有列表编辑作用,可以在排序作用里裁撤置顶)。

收回置顶的预设场景:用户想保留此项的自选,不过不想把此项放在顶部

在列表中,需将某一项大概某几项放在列表最上边,置顶后也可打消置顶。比如在微信里,聊天记录不合乎用排序的不二法门,选取置顶,可将某些对话置于页面顶部。细致描述为:微信聊天对话的暗中认可顺序是流行的对话在最上边,A项置顶后,A在页面顶部,最新的对话加在A下方,若再将B置顶,则B在A上方,两项都为置顶项;若将某项撤消置顶,则该项活动到置顶项下方,当有新对话时,会在此项的顶端。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图