Xamarin.Forms中使用LiteDB分頁
阿新 • • 發佈:2018-03-11
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分頁