F#CSV解析到C#应用
作者:互联网
我有一个C#控制台应用程序,该应用程序调用F#库,该库通过使用CSVTypeProvider进行一些CSV解析. (http://fsharp.github.io/FSharp.Data/reference/fsharp-data-csvprovider.html)
不幸的是,我是F#的新手,所以我还没有找到一种以C#对象列表的形式有效地将已解析的数据从F#传递到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;
提取器定义为:
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#库的C#(客户)中创建所需的类.
type Customer(ID : int, Name : string) =
member this.ID = ID
member this.Name = Name
然后,我可以使用映射功能将行转换为客户对象,并将客户类型导入c#.
解决方法:
我将像这样在F#项目中定义模型类
type Customer = {id:int;name:string}
然后在地图上
Seq.map(fun row -> {id=row.id;name=row.name})
并以IEnumerable的形式返回给您的C#代码.