Получить последнюю вставку в LiteDB c # .net - PullRequest
0 голосов
/ 05 марта 2019

Я работаю над созданием метода, который вставляет последнюю транзакцию в litedb.

У меня есть дата, которая сохраняется.

Вот класс:

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 для поиска самой последней записи, либо это похоже на очередь, в которой я могу просто вытолкнуть первое значение в ответном запросе и получить самое последнее?

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Guid содержит некоторую информацию RawValue, такую ​​как CreationTime (system.datetime), Increment, Machine, Pid, ​​Timestamp.Возможно, вы сможете использовать их в своем запросе.

1 голос
/ 06 марта 2019

По умолчанию записи в LiteDB упорядочены по первичному ключу (_id по умолчанию), когда вы запрашиваете их.Из предоставленного вами кода я не могу сказать, какой тип данных является первичным ключом, но если он является целым числом и не задан вручную, тогда вы можете просто найти последнюю запись:

collection.FindOne(Query.All(Query.Descending))

ЕслиВаши первичные ключи не обязательно будут в порядке (например, если тип данных Guid), то вам нужно будет использовать другой подход.К сожалению, я не думаю, что DateString окажет большую помощь: любые запросы, сортирующие по нему, будут сортироваться по алфавиту, а не по хронологии.Если возможно, я рекомендую использовать свойство DateTime для хранения текущей метки времени, а не сохранять ее как string.Это позволит вам легко отсортировать записи, например:

collection.EnsureIndex("Timestamp");
collection.FindOne(Query.All("Timestamp", Query.Descending));
...