1. 程式人生 > >Xamarin.Forms中使用LiteDB分頁

Xamarin.Forms中使用LiteDB分頁

geb git utc 數據緩存 orm end mes 條件 query

Xamarin.Forms中使用LiteDB分頁

在移動應用的開發中,為力提高用戶體驗,一般都會在本地設計一套數據緩存。這裏我使用的是LiteDB來緩存數據。

LiteDB是.Net平臺的一個開源的NoSQL文件數據庫,

開源庫地址:https://github.com/mbdavid/LiteDB。

NuGet地址:https://www.nuget.org/packages/LiteDB/。

對於分頁,首先我們要解決三個問題:1. 查詢條件、2. 排序、3. 分頁。

1. 查詢條件這裏就不講了。

2. 排序:由於LiteDB是NoSQL的,所以不支持內部直接排序了,那麽配合Linq的OrderBy或者OrderByDescending即可以實現。

3. 分頁:我想到的是使用linq的skip方法來跳過一些記錄。

看例子:

數據類型:

    public class MessageBean
   {
        public string Id { get; set; }
        
        public DateTime SendTime { get; set; }

        public int MsgType { get; set; }

        public long ConversationId { get; set; }

        public bool IsSendSuccess { get
; set; } public string SenderId { get; set; } public string MessageJsonContent { get; set; } }

分頁:根據MessageBean的SendTime進行分頁。

public class MessagePageHelper
    {
        private DateTime pageTime;
        private const int limit = 10;
        private long ConversationId;

        
public MessagePageHelper(long conversationId) { this.ConversationId = conversationId; pageTime = DateTime.UtcNow; } public Task<IEnumerable<MessageBean>> GetEarlierMessage() { return Task<IEnumerable<MessageBean>>.Factory.StartNew(() => { var date = new DateTime(1970, 1, 1, 0, 0, 0, 0); IEnumerable<MessageBean> result = null; var query0 = Query.LT("SendTime", pageTime); var query1 = Query.EQ("ConversationId", ConversationId); var query = Query.And(query0, query1); var datas = MessageDataService.Instance.Find(query); if (datas != null) { datas = datas.OrderBy(x => ((x.SendTime - date).TotalMilliseconds)); int count = datas.Count(); int skip = count > limit ? count - limit : 0; result = datas.Skip(skip); if (result != null && result.Count() > 0) { pageTime = result.First<MessageBean>().SendTime; } } return result; }); } }

Xamarin.Forms中使用LiteDB分頁