Получить и кэшировать набор результатов в мое приложение - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть столбец byte[] в таблице, в которой хранятся данные отпечатков пальцев. Я sh запрашиваю строки из таблицы только один раз и сохраняю набор записей в переменной или где-то в моем коде, чтобы мне не приходилось каждый раз запрашивать базу данных. Запрос вернет тысячи строк.

Это извлечет все записи для меня:

var table = (from a in context.tblFingerprints
                              select new {a} ).ToList();

Я попытался объявить переменную в классе AppData: public List<object> TableData; Затем попытался сохранить переменную 'table' значения к нему.

Data.TableData = table;

Ошибка остается:

Невозможно неявно преобразовать тип 'System.Collections.Generic.List<<anonymous type: FingerprintTEST.tblFingerprint a>>' в 'System.Collections.Generic.List<object>'

This Вот как я sh запросить строки, возвращенные из результата для сопоставления отпечатка пальца:

foreach (var row in Data.TableData)
{
    Template tem = new Template();
    tem.DeSerialize(row.a.fingerTemplate);

    if (tem != null)
    {
        // Compare feature set with particular template.
        Verificator.Verify(features, tem, ref res);

        if (res.Verified)
        {...}
    }
}

Любые идеи, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 19 февраля 2020
  • Вам не нужно select new { a } (это создание нового анонимного типа с одним членом для всей записи, что глупо.
    • Вам также не нужно любое выражение Linq, просто используйте ToList() непосредственно DbSet.
  • Сохраните результат в переменной * stati c.
class Something
{
    private static List<tblFingerprint> _fingerprints;

    public void Do()
    {
        DbContext context = ...

        if( _fingerprints is null )
        {
            _fingerprints = context.tblFingerprints.ToList();
        }

        // do stuff with `_fingerprints`
    }
}
0 голосов
/ 19 февраля 2020

Удалите «new {a}», замените его просто «a» и скажите ToList, что это список объектов.

var table = (from a in context.tblFingerprints
             select a).ToList<object>();
0 голосов
/ 19 февраля 2020

Вы возвращаете их как новые объекты с select new {a}. Если context.tblFingerprints имеет тип TableData, вам просто нужно select a

var table = (from a in context.tblFingerprints
                          select a).ToList();
...