IQueryable与字典的性能

| 启动时,我正在应用程序中缓存大量静态元数据。它来自数据库,并且有大量的外键关系。我正在研究对其建模的最佳方法。 我刚开始使用LINQ。 我很容易声明一个类
public class AllData {
    public static IQueryable<libm_ColPurpose> IQ_libm_ColPurpose = libm_ColPurpose.All();
    public static IQueryable<libm_ColType> IQ_libm_ColType = libm_ColType.All();
...
(我正在使用SubSonic 3生成我的类,但这不重要)。 然后,我可以使用IQueryable
<T
>成员来访问所需的任何内容,例如:
libm_ColType ct = AllData.IQ_libm_ColType.SingleOrDefault(x => x.ColTypeStr == this.DefaultJetColTypeStr);
在使用IQueryable之前,我使用过字典来存储FK关系,因此为了模仿以上代码,我将从先前存在的List
<libm_ColType
>列表中编写以下代码
Dictionary<string, libm_ColType> colTypeByColTypeStr = new Dictionary<string, libm_ColType>();
foreach (libm_ColType x in list) { rtn.Add(x.ColTypeStr, x); }
然后我可以使用
libm_ColType ct = colTypeByColTypeStr[this.DefaultJetColTypeStr];
好的,所以最后我们解决了这个问题! 通过ID进行Dictionary查找非常高效,但是IQueryable解决方案更加灵活和优雅。 我想知道使用IQueryable能获得多少性能提升。我怀疑每次调用列表时都会对列表进行线性扫描,如果涉及到很多记录,那真的会超过重复调用的总和。 如果可以识别唯一值的列并在第一次查找后生成并缓存哈希表,那将是很好的选择,但是我怀疑这将不属于该产品。 对于使用LINQ来说,这对我来说有点麻烦。 请注意(我将再次重复),我不是从数据库中提取数据,它已经在内存中,并且正在那里查询它,所以我只在查找数据库中很有趣-内存IQueryable
<T
>。     
已邀请:
IQueryable代表数据存储中的一个集合,因此您可能在内存中没有这些集合。如果您明确想要内存中的集合,那么我将回到您的词典。请记住,这不会阻止您对数据使用LINQ查询。     

要回复问题请先登录注册