很抱歉,如果这是一个新手问题。我是Linq的新手 我试图弄清楚如何使用where语句忽略csv导入的第一行。我可以使用Skip(1)来完成它,但我不确定如何在where语句中编写它。
这是我如何使用skip(1)
进行的List<string> allLinesText = File.ReadAllLines(filename).
Skip(1).
Take(100).
ToList();
如果我将Skip(1)改为where(line =&gt; ... 我怎么写呢?
答案 0 :(得分:3)
虽然@ Cetin的回复正是您所要求的,但基于您的上述评论,我相信您希望完成的内容可以使用内联if语句检查是否需要跳过第一行或不按如下方式:
bool isFirstLineHeader;
// Set the isFirstLineHeader variable here (or passed in through an argument)
List<string> allLinesText = File.ReadAllLines(filename)
.Skip(isFirstLineHeader ? 1 : 0)
.Take(100)
.ToList();
希望这有帮助。
答案 1 :(得分:2)
如果必须在哪里,Where()有一个索引选项。
.Where( (row, index) => index > 0 )
对于像标题一样的条件跳过,你可以用Skip:
来表达它.Skip( hasHeader ? 1 : 0 )
或坚持在哪里:
.Where( (row, index) => !hasHeader || index > 0 )
实际上,在使用CSV进行Linq时,我建议您在codeplex上查看Linq To CSV。
PS:Linq的CSV处理可能不像听起来那么容易。取决于您的CSV文件版本。例如,这个文件不是合法的CSV,而是另一个(即:PostgreSQL会成功将其导入为CSV而不是Excel,也不是SQL服务器):
1, "Yellow
Red
Blue", "Still On the first row"