如何使用where bool语句linq跳过(1)(标题行)

时间:2016-03-08 16:24:00

标签: linq

很抱歉,如果这是一个新手问题。我是Linq的新手 我试图弄清楚如何使用where语句忽略csv导入的第一行。我可以使用Skip(1)来完成它,但我不确定如何在where语句中编写它。

这是我如何使用skip(1)

进行的
List<string> allLinesText = File.ReadAllLines(filename).
Skip(1).
Take(100).
ToList();

如果我将Skip(1)改为where(line =&gt; ... 我怎么写呢?

2 个答案:

答案 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"