编程语言
首页 > 编程语言> > F#CSV解析到C#应用

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#代码.

标签:f,csv,c
来源: https://codeday.me/bug/20191120/2042552.html