到目前为止,我有以下代码:
var lines = from rawLine in File.ReadLines(readFolderFile, Encoding.Default) where !string.IsNullOrEmpty(rawLine) && !string.IsNullOrEmpty(rawLine.Trim(';')) select rawLine;
但是现在我还需要在IEnumerable的第一个“列”中增加行数。我试图从其他遇到或多或少相似的问题的人那里适应过来,但是到目前为止还没有成功。
我尝试了“解决方案”,例如:
How do you add an index field to Linq results,
Get record's row number using Linq
和其他一些。我确实不明白,我需要某种索引,但是我不知道该在哪里添加我的.Select(()=> )
我尝试过的并且不起作用的是:
var lines = (from rawLine in File.ReadLines(readFolderFile, Encoding.Default) where !string.IsNullOrEmpty(rawLine) && !string.IsNullOrEmpty(rawLine.Trim(';'))
select rawLine).Select((rawLine, index) => index++, rawLine);
答案 0 :(得分:2)
您确实需要使用Select,然后才可以存储索引。
var lines = File.ReadLines(readFolderFile, Encoding.Default)
.Where(x => !string.IsNullOrEmpty(rawLine) && !string.IsNullOrEmpty(rawLine.Trim(';')))
.Select((x, i) => new
{
Line = x,
Index = i
}
.ToList();
答案 1 :(得分:2)
查询语法无法为索引提供Select
(和Where
)的重载。因此,您需要使用方法语法。
如果您还想计算空行但不将其包括在结果中,请在Where
之前选择匿名类型,否则在以下位置:
var linesAndLineNumbers = File.ReadLines(readFolderFile, Encoding.Default)
.Select((line, index) => new { Line = line.Trim(';'), LineNumber = index + 1 })
.Where(x => !String.IsNullOrWhiteSpace(x.Line));
有没有办法,我可以得到结果为Line = {Line = “ LineNumer; colum1; colum2; columnX ...”}
确定:
var lines = File.ReadLines(readFolderFile, Encoding.Default)
.Select((line, index) => new { Line = line.Trim(';'), LineNumber = index + 1 })
.Where(x => !String.IsNullOrWhiteSpace(x.Line))
.Select(x => $"{x.LineNumber};{x.Line};");