c# - List<T> FirstOrDefault() 性能不佳 - 在这种情况下可以使用字典吗?

标签 c# linq performance linq-to-sql list

我有一组在特定时间段内有效的“代码”Z。

因为我在一个大循环(百万+)中需要它们很多次,每次我必须查找相应的代码时,我将它们缓存在 List<> 中。找到正确的代码后,我插入(使用 SqlBulkCopy)一百万行。

我使用以下代码查找 ID(l_z 是一个 List<T>)

var z_fk = (from z in l_z
            where z.CODE == lookupCode &&
                  z.VALIDFROM <= lookupDate &&
                  z.VALIDUNTIL >= lookupDate 
            select z.id).SingleOrDefault();

在其他情况下,我使用了性能极佳的字典,但在那些情况下,我只需要根据代码查找 id。

但现在搜索字段组合时,我被卡住了。

有什么想法吗?提前致谢。

最佳答案

创建一个字典来存储每个查找代码的项目列表 - Dictionary<string, List<Code>> (假设查找代码是一个字符串并且对象是代码类型)。

然后当你需要根据lookupDate查询时,您可以直接从 dict[lookupCode] 运行查询:

var z_fk = (from z in dict[lookupCode]
            where z.VALIDFROM <= lookupDate &&
                  z.VALIDUNTIL >= lookupDate 
            select z.id).SingleOrDefault();

然后只要确保每当你有一个新的 Code 对象时,它就会被添加到 List<Code> 中。收藏于dict对应于lookupCode (如果不存在,则创建它)。

关于c# - List<T> FirstOrDefault() 性能不佳 - 在这种情况下可以使用字典吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4805605/

相关文章:

c# - 在可枚举的可枚举上调用 .Distinct()

python - 加快简单距离计算速度

mysql - 为什么使用mysqldump导入数据后会出现固定的block size write?

c# - 在主线程上执行异步任务的最佳方式

c# - 创建用于测试 Windows.Web.Http.HttpClient 的模拟 IHttpFilter

c# - 周期性任务无效跨线程访问异常

python - Python 中列表函数的成本

c# - C#-随机数生成器错误

c# - 亚音速 : Self Join , 表别名

c# - 将多类型 OrderBy 表达式存储为属性