我的文件中写满了这样的记录:
NCNSCF1124557200811UPPY19871230
代码都是固定长度的,其中一些链接到其他平面文件(有点像关系数据库)。使用LINQ查询此数据的最佳方法是什么?
这是我直观地想出来的,但我想知道是否有更优雅的方式:
var records = File.ReadAllLines("data.txt");
var table = from record in records
select new { FirstCode = record.Substring(0, 2),
OtherCode = record.Substring(18, 4) };
答案 0 :(得分:3)
首先,我不会把它全部读入内存中。编写一个LineReader类非常容易,它一次迭代一行文件。我在MiscUtil中有一个你可以使用的版本。
但是,除非您只想读取一次结果,否则您可能希望在结尾处调用ToList()以避免多次读取文件。 (这仍然比阅读所有行并将 保留在内存中更好 - 你只想进行一次拆分。)
一旦你基本上获得了所有表的内存集合,就可以使用普通的LINQ to Objects将它们连接在一起等等。你可能想要使用更复杂的数据模型来获取索引。
答案 1 :(得分:0)
我认为没有更好的方法开箱即用。
可以定义一个平面文件Linq提供程序,它可以使整个事情变得更简单,但据我所知,还没有人。