0

byte[]在一个表中有一个列,其中存储了指纹数据。我希望只查询一次表中的行并将记录集存储在变量中或代码中的某个位置,这样我就不必每次都查询数据库。该查询将返回数千行。

这将为我获取所有记录:

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

我尝试在 AppData 类中声明一个变量:public List<object> TableData; 然后尝试将变量“表”值存储到它。

Data.TableData = table;

错误仍然存​​在:

无法将类型隐式转换'System.Collections.Generic.List<<anonymous type: FingerprintTEST.tblFingerprint a>>''System.Collections.Generic.List<object>'

这就是我希望查询从结果返回的行以匹配指纹的方式:

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)
        {...}
    }
}

请问有什么想法吗?

4

3 回答 3

0

删除“new {a}”并仅替换为“a”,并告诉 ToList 这是一个对象列表。

var table = (from a in context.tblFingerprints
             select a).ToList<object>();
于 2020-02-19T00:57:06.993 回答
0

您将这些作为新对象返回select new {a}。如果context.tblFingerprints是类型TableData,你只需要select a

var table = (from a in context.tblFingerprints
                          select a).ToList();
于 2020-02-19T00:55:36.203 回答
0
  • 您不需要select new { a }(这是创建一个新的匿名类型,整个记录只有一个成员,这很愚蠢。
    • 您也根本不需要任何 Linq 表达式,直接使用ToList()onDbSet即可。
  • 将结果存储在静态变量中。
class Something
{
    private static List<tblFingerprint> _fingerprints;

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

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

        // do stuff with `_fingerprints`
    }
}
于 2020-02-19T00:55:43.680 回答