학습 연습으로 F # 및 F #의 유형 공급자 기능을 사용하여 5000 줄의 csv 파일에 대한 데이터 분석을 수행하고 있습니다. 필자가 f #에서 유형 공급자 생성 유형을 사용하면 자연스럽게 csv 파일의 헤더 행이 해당 유형의 필드 이름이됩니다.F #/C# 경계에서 필드 이름 유지
type restaurantCsv = CsvProvider<"C:\Users\Paul\Desktop\HealthDepartment\RestaurantRatings2013.csv",HasHeaders=true>
type RawInspectionData(filename : string) =
member this.allData = restaurantCsv.Load(filename)
member public this.inspectionsList = this.allData.Data.ToList()
member this.FilterByName(name : string) =
this.allData.Data
|> Seq.filter (fun x -> x.EstablishmentName.Contains(name))
또한 C# 파일을 테스트하는 장치에서 F # 코드 (위 코드가 생성 한 라이브러리에서)를 호출합니다. 그것은 잘 작동합니다. 그러나 F #이 FilterByName에서 반환하는 IEnumberable을 사용하면 필드 이름 정보가 보존되지 않습니다. 은 F # -generated 유형의 필드 이름을 인식하는 C#을 얻을 수있는 방법을
var inspectionsOnCafes = inspections2013.FilterByName("Cafe");
var inspections = (from row in inspectionsOnCafes
select new
{
inspectorID = row.Item3,
restaurantName = row.Item5,
inspectionDate = row.Rest.Item6
}).ToList();
내 질문 있나요 : 그래서 튜플 등에서 .Item1, 항목 2, 새로운 필드 이름을 매핑 코드를 그래서 행을 매핑 할 필요가 없습니다. 항목 #은 읽기 쉬운 필드 이름으로?
inspectorID = row.InspectorID,
// etc.
주 : 즉, 나는 다음과 같은 코드를 가질 수있는 방법은 내가 How do I create an F# Type Provider that can be used from C#? 보았지만 카메론 Taggert의 질문 토마스 Petricek의 대답은 유형 제공자의 약간 다른 측면에있을 나에게 보인다. 비록 그들이 spot-on이라 할지라도, 나는 그것을 얻지 못하므로 좀 더 많은 도움이 필요합니다.
다니엘이 말했듯이이 작업을하려면'CsvProvider'를 생성 유형 공급자로 변경해야합니다. 이것은 우리가 생각해 왔던 것이지만 실제로 그것을 할 수있는 시간을 찾지 못했습니다 ... 그러나 좋을 것입니다! –
글쎄, 너희들은 이미 열심히 노력하고있어, 전체 공동체가 그것을 높이 평가한다. 앞으로의 릴리스에서 이것을 볼 수 있기를 희망합니다. 그러나 거기에는 많은 "멋진 기능"이 있으며, 모든 기능을 한 번에 완료 할 수는 없습니다. 감사. – philologon
감사! 나는 또한 우리가 항상 지역 사회의 다른 사람들로부터 기부금을 환영한다고 언급해야한다 ;-) –