【发布时间】:2018-07-23 14:49:02
【问题描述】:
我存储的内容基本上相当于存储在 CSV 文件中的日志数据。它的格式为<datetime>,<val1>,<val2>, 等。但是,日志文件是按帐户 ID 和月份存储的,因此如果您跨月份或帐户 ID 查询,您将检索多个文件。
我希望能够使用 LINQ 查询它,这样如果我可以调用 logFiles.Where(o => o.Date > 1-1-17 && o.Date < 4-1-17)。我想我需要一些东西来检查该查询中的日期范围,并注意到它跨越 4 个月,这会导致它只检查该日期范围内的文件。
有什么方法可以做到这一点,而不会涉及到自定义IQueryable LINQ provider 弄脏我的手?如有必要,我可以进入那个兔子洞,但我想首先确保它是正确的兔子洞。
【问题讨论】:
-
听起来你有足够的数据,你会真正受益于数据库中的数据,而不是平面文件中的数据。试图模拟数据库在许多不同文件中有效搜索大型复杂数据集并允许它们被有效处理的能力并不是一个容易的问题。如果已经有好的解决方案,你最好不要自己解决。
-
这超出了我的控制——我的老板决定使用平面文件,因为数据量很大,读取次数很少,而且我们希望降低在 Azure 中运行数据库的成本。
-
大量数据正是在平面文件中管理这些数据成为问题的原因。如果它很小,您可以使用易于编写但效率低下的解决方案。既然不是,你需要非常小心很多事情,才能有一个真正合理的解决方案。
-
我能提供更多关于日志文件名称和目录方式的信息吗?
-
但是在两个日期之间修改的具有 csv 扩展名的目录中获取所有文件并不是什么大问题。即使效率不高。但是,如果您开始过滤并合并所选文件中的结果以获得结果,它就会开始变得一团糟。如果您必须处理好编辑,请停止一切并使用 Bd。
标签: c# linq custom-linq-providers