我有一个C#控制台应用程序,调用了一个使用CSVTypeProvider进行CSV解析的F#库。(http://fsharp.github.io/FSharp.Data/reference/fsharp-data-csvprovider.html)
不幸的是,我对F#还比较陌生,因此我没有找到一种有效地将解析后的数据以C#对象列表的形式传递给C#的方法。
假设我有一个C#数据模型:
public class Customer{
public int ID { get; set; }
public string Name { get; set; }
}
然后我希望将来自csv类型提供程序的数据转换为该模型的列表:
Extractor extractor = new Extractor();
List<Customer> customers = extractor.Data;
将Extractor定义为:
module internal FileLoader =
type = Customers = CsvProvider<"C:\somefilePath", HasHeaders = true>
let customers = Customers.Load<"C:\someFilePath">
type Extractor() =
member this.Data = FileLoader.customers.Rows |> Seq.map(fun row -> new Customer(row.ID, row.Name))
我原本想可以将Datamodel导入F#库中,然后使用map函数将行的值映射到C#对象,但是似乎不太起作用。
编辑:
我找到了一种解决方法,但我仍然希望有更优雅的解决方案。
我只需要在F#库中创建所需的类(Customer)即可。
type Customer(ID : int, Name : string) =
member this.ID = ID
member this.Name = Name
然后我可以使用映射函数将行转换为客户对象,并将客户类型导入到C#中。