Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq IQueryable与Dictionary的性能比较_Linq_Performance_Dictionary_Subsonic3_Iqueryable - Fatal编程技术网

Linq IQueryable与Dictionary的性能比较

Linq IQueryable与Dictionary的性能比较,linq,performance,dictionary,subsonic3,iqueryable,Linq,Performance,Dictionary,Subsonic3,Iqueryable,我在应用程序启动时缓存了一大堆静态元数据。它来自数据库,有大量的外键关系。我正在研究为它们建模的最佳方式。 我刚从林克开始 声明一个类对我来说很容易 public class AllData { public static IQueryable<libm_ColPurpose> IQ_libm_ColPurpose = libm_ColPurpose.All(); public static IQueryable<libm_ColType> IQ_libm

我在应用程序启动时缓存了一大堆静态元数据。它来自数据库,有大量的外键关系。我正在研究为它们建模的最佳方式。 我刚从林克开始

声明一个类对我来说很容易

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();
...
在使用IQueryable之前,我使用字典来存储FK关系,因此为了模拟上面的代码,我将从一个预先存在的列表
列表中编写以下代码

好了,我们终于开始讨论这个问题了

通过ID查找字典非常有效,但是IQueryable解决方案更加灵活和优雅

我想知道使用IQueryable我将获得多大的性能提升。我怀疑每次我调用它时,我都会对列表进行线性扫描,如果涉及到很多记录的话,这会增加重复调用的次数。 如果我能够识别唯一值的列,并在第一次查找后生成并缓存哈希表,那就太好了,但我怀疑这不会是产品的一部分

关于使用LINQ,这对我来说有点破坏交易


请注意(我将再次重复)我没有从数据库中提取数据,它已经在内存中,我正在那里查询它,所以我只想查找内存中IQueryable

IQueryable表示数据存储中的集合,所以您可能没有内存中的集合。如果您明确地想要内存中的集合,那么我会回到您的字典。请记住,这并不妨碍您对数据使用LINQ查询。

Jeez,在查看了LINQ to Object Q之后,我想知道我是否已经将数据库中的所有数据加载到IQueryable中,或者我刚刚设置了一组巨大的单个DB检索,当我引用它们时,这些数据库检索即将停止。我是LINQ的新手!也许我应该坚持我的打字清单!
libm_ColType ct = AllData.IQ_libm_ColType.SingleOrDefault(x => x.ColTypeStr == this.DefaultJetColTypeStr);
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];