我在一个存储有指纹数据的表中有一个byte[]
列。我希望只查询一次表中的行,并将记录集存储在变量或代码中的某个位置,这样我就不必每次都查询数据库了。查询将返回数千行。
这将为我获取所有记录:
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>'
这就是我希望查询匹配指纹的结果返回的行的方式:
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)
{...}
}
}
有什么想法吗?
您使用select new {a}
将这些作为新对象返回。如果context.tblFingerprints
是TableData
类型,您只需要select a
var table = (from a in context.tblFingerprints
select a).ToList();
- 您不需要
select new { a }
(这是在创建一个新的匿名类型,整个记录只有一个成员,这很愚蠢。- 您也根本不需要任何Linq表达式,只需直接在
DbSet
上使用ToList()
即可
- 您也根本不需要任何Linq表达式,只需直接在
- 将结果存储在静态变量中
class Something
{
private static List<tblFingerprint> _fingerprints;
public void Do()
{
DbContext context = ...
if( _fingerprints is null )
{
_fingerprints = context.tblFingerprints.ToList();
}
// do stuff with `_fingerprints`
}
}
删除"new{a}"并仅替换为"a",并告诉ToList这是一个对象列表。
var table = (from a in context.tblFingerprints
select a).ToList<object>();