在 LiteDB c# .net 中获取最新插入
Get Most Recent Insert In LiteDB c# .net
我正在创建一种方法,将最后一笔交易插入 litedb。
我有一个日期字符串,已保存。
这里是 class:
public class TransactionPair : TransactionTwo
{
private string returnT;
public TransactionPair() { /* making an empty declaration so we don't NEED to pass it anything if we don't want. */}
public TransactionPair(string returnT, string request)
{
this.returnT = returnT;
JObject o = JObject.Parse(returnT);
AuthCode = o.GetValue("AuthoCode").ToString();
TransType = o.GetValue("TransType").ToString();
AmountString = o.GetValue("AmountString").ToString();
CardType = o.GetValue("CardType").ToString();
Last4 = o.GetValue("Last4").ToString();
RefID = o.GetValue("RefID").ToString();
CardToken = o.GetValue("CardToken").ToString();
ExpDate = o.GetValue("ExpDate").ToString();
DateString = DateTime.Now.ToString("d-MMM-yyyy:HH:mm:ss.f", DateTimeFormatInfo.InvariantInfo);
Request = request;
}
public string Request { get; set; }
}
这里是交易对的插入方法
public void InsertTransactionPair(string json, string request)
{
JObject transObj = JObject.Parse(json);
using (var db = new LiteDatabase(connectionString))
{
var collection = db.GetCollection<TransactionPair>("TransactionPair");
var transactionTwo = new TransactionPair
{
AuthCode = GetValue(transObj, "AuthCode"),
TransType = GetValue(transObj, "TransType"),
AmountString = GetValue(transObj, "AmountString"),
CardType = GetValue(transObj, "CardType"),
Last4 = GetValue(transObj, "Last4"),
RefID = GetValue(transObj, "RefID"),
CardToken = GetValue(transObj, "CardToken"),
DateString = DateTime.Now.ToString("d-MMM-yyyy:HH:mm:ss.f", DateTimeFormatInfo.InvariantInfo),
Request = request
};
collection.Insert(transactionTwo);
collection.EnsureIndex(x => x.RefID);
}
}
我需要一种查找最新条目的 Linq 方法,或者它是否像一个队列,我可以在其中弹出 return 查询中的第一个值并获取最新的值?
LiteDB中的记录在查询时默认按主键排序(默认_id
)。从你提供的代码中我无法判断主键是什么数据类型,但如果它是一个整数并且不是手动设置的,那么你可以简单地查找最后一条记录:
collection.FindOne(Query.All(Query.Descending))
如果不能保证您的主键是有序的(例如,如果数据类型是 Guid
),那么您将需要使用其他方法。不幸的是,我认为 DateString 不会有太大帮助:任何对其进行排序的查询都将按字母顺序排序,而不是按时间顺序排序。如果可能,我建议使用 DateTime
属性 来存储当前时间戳,而不是将其存储为 string
。这样做可以让您轻松地对记录进行排序,例如:
collection.EnsureIndex("Timestamp");
collection.FindOne(Query.All("Timestamp", Query.Descending));
Guid 包含一些 RawValue 信息,如 CreationTime(system.datetime)、Increment、Machine、Pid、Timestamp。也许您可以在查询中使用它们。
我正在创建一种方法,将最后一笔交易插入 litedb。
我有一个日期字符串,已保存。
这里是 class:
public class TransactionPair : TransactionTwo
{
private string returnT;
public TransactionPair() { /* making an empty declaration so we don't NEED to pass it anything if we don't want. */}
public TransactionPair(string returnT, string request)
{
this.returnT = returnT;
JObject o = JObject.Parse(returnT);
AuthCode = o.GetValue("AuthoCode").ToString();
TransType = o.GetValue("TransType").ToString();
AmountString = o.GetValue("AmountString").ToString();
CardType = o.GetValue("CardType").ToString();
Last4 = o.GetValue("Last4").ToString();
RefID = o.GetValue("RefID").ToString();
CardToken = o.GetValue("CardToken").ToString();
ExpDate = o.GetValue("ExpDate").ToString();
DateString = DateTime.Now.ToString("d-MMM-yyyy:HH:mm:ss.f", DateTimeFormatInfo.InvariantInfo);
Request = request;
}
public string Request { get; set; }
}
这里是交易对的插入方法
public void InsertTransactionPair(string json, string request)
{
JObject transObj = JObject.Parse(json);
using (var db = new LiteDatabase(connectionString))
{
var collection = db.GetCollection<TransactionPair>("TransactionPair");
var transactionTwo = new TransactionPair
{
AuthCode = GetValue(transObj, "AuthCode"),
TransType = GetValue(transObj, "TransType"),
AmountString = GetValue(transObj, "AmountString"),
CardType = GetValue(transObj, "CardType"),
Last4 = GetValue(transObj, "Last4"),
RefID = GetValue(transObj, "RefID"),
CardToken = GetValue(transObj, "CardToken"),
DateString = DateTime.Now.ToString("d-MMM-yyyy:HH:mm:ss.f", DateTimeFormatInfo.InvariantInfo),
Request = request
};
collection.Insert(transactionTwo);
collection.EnsureIndex(x => x.RefID);
}
}
我需要一种查找最新条目的 Linq 方法,或者它是否像一个队列,我可以在其中弹出 return 查询中的第一个值并获取最新的值?
LiteDB中的记录在查询时默认按主键排序(默认_id
)。从你提供的代码中我无法判断主键是什么数据类型,但如果它是一个整数并且不是手动设置的,那么你可以简单地查找最后一条记录:
collection.FindOne(Query.All(Query.Descending))
如果不能保证您的主键是有序的(例如,如果数据类型是 Guid
),那么您将需要使用其他方法。不幸的是,我认为 DateString 不会有太大帮助:任何对其进行排序的查询都将按字母顺序排序,而不是按时间顺序排序。如果可能,我建议使用 DateTime
属性 来存储当前时间戳,而不是将其存储为 string
。这样做可以让您轻松地对记录进行排序,例如:
collection.EnsureIndex("Timestamp");
collection.FindOne(Query.All("Timestamp", Query.Descending));
Guid 包含一些 RawValue 信息,如 CreationTime(system.datetime)、Increment、Machine、Pid、Timestamp。也许您可以在查询中使用它们。