需要 运行 LINQ 查询子文件夹中的数百个 JSON 文件

Need to run LINQ queries on several hundred JSON files in child folders

使用 C#:

我在文件系统的嵌套文件夹中有数百个 JSON 文件。 我需要 运行 LINQ 查询文件中的数据,并找到 JSON 个文件,它们的 JSON 数据与某些 crieria 匹配。

我可以简单地序列化列表中的所有 JSON 文件,然后 运行 我对数组的 LINQ 查询。但是,由于我正在从磁盘读取所有数据,因此该方法占用了大量内存。

有什么方法可以 运行 我对文件系统中 JSON 个文件的 LINQ 查询而不将它们全部加载到内存中吗?

好的,noSql 不适合你,但我在这里找到了一个你可以使用的不同解决方案。

将文件插入 sql 数据库,然后您可以简单地对它们进行 select 统计。

这是一种方法

-- Load file contents into a variable
SELECT @json = BulkColumn
 FROM OPENROWSET (BULK 'C:\JSON\Books\book.json', SINGLE_CLOB) as j

-- Load file contents into a table 
SELECT BulkColumn
 INTO #temp 
 FROM OPENROWSET (BULK 'C:\JSON\Books\book.json', SINGLE_CLOB) as j

并使用Json_Value阅读

SELECT FirstName, LastName,
JSON_VALUE(jsonInfo,'$.info.address[0].town') AS Town
FROM #temp
WHERE JSON_VALUE(jsonInfo,'$.info.address[0].state') LIKE 'US%'
ORDER BY JSON_VALUE(jsonInfo,'$.info.address[0].town')

这是导入 json 个文件的方法

https://docs.microsoft.com/en-us/sql/relational-databases/json/import-json-documents-into-sql-server?view=sql-server-2017

下面是如何在其中设置位置。

https://docs.microsoft.com/en-us/sql/t-sql/functions/json-value-transact-sql?view=sql-server-2017

您应该能够按照以下帖子或类似内容中的描述流式传输数据。这应该有助于解决内存问题。 ,