使用csvhelper中的ShouldSkipRecord过滤日期范围会是什么样?
在Google上搜索了一堆,但仅引用了它的回调,这不足以让我了解ShouldSkipRecord调用的语法。您是否按列和行将其拾取。 API中只有一小段代码,就是这样。
if (File.Exists(lastPathName))
{
using (var reader = new StreamReader(lastPathName))
using (var csv = new CsvReader(reader))
{
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.RegisterClassMap<QuotedataMap>();
csv.Configuration.ShouldSkipRecord = row => row[0] >= DateTime.Parse("12/12/2019");
var records = csv.GetRecords<Quotedata>();
return records;
}
}
public sealed class QuotedataMap : ClassMap<Quotedata>
{
public QuotedataMap()
{
Map(m => m.QuoteDate).Index(0);
Map(m => m.OpenPrice).Index(1);
Map(m => m.HighPrice).Index(2);
Map(m => m.LowPrice).Index(3);
Map(m => m.ClosePrice).Index(4);
Map(m => m.DateVolume).Index(5);
}
}
那么如何过滤日期范围? > = <= ==?
答案 0 :(得分:1)
行变量是一个字符串数组。因此,您必须在比较之前将String转换为DateTime。
csv.Configuration.ShouldSkipRecord = row => DateTime.Parse(row[0]) >= DateTime.Parse("12/12/2019");
如果您的表达式将变得更加复杂,则可以将其移至单独的方法。
csv.Configuration.ShouldSkipRecord = row => FilterDataRange(row[0]);
方法看起来像这样
private bool FilterDataRange(string quoteDateAsString)
{
var date = DateTime.Parse(quoteDateAsString);
return date >= new DateTime(2019, 12, 1) && date <= new DateTime(2019, 12, 31);
}