如何在给定字符串参数的情况下获取属性的值。
我有一个对象CsvProvider.Row
,它有属性a,b,c。
我想根据作为字符串参数给出的属性获取属性值。
我试过这样的事情:
let getValue (tuple, name: string) =
snd tuple |> Seq.averageBy (fun (y: CsvProvider<"s.csv">.Row) -> y.```name```)
但是它给了我以下错误:
lambda表达式中的意外保留关键字。预计不完整 在此点或其他标记之前或之前的结构化构造。
简单的函数调用应如下所示:
getValue(tuple, "a")
它应该等同于以下函数:
let getValue (tuple) =
snd tuple |> Seq.averageBy (fun (y: CsvProvider<"s.csv">.Row) -> y.a)
这样的事情是否可能?
感谢您的帮助!
答案 0 :(得分:2)
如果您通过列名静态访问数据,则CSV类型提供程序非常好,因为您可以通过类型推断和检查获得良好的自动完成功能。
但是,对于动态访问,可能更容易直接使用基础this
(也是F#Data的一部分),而不是使用类型提供程序:
CsvFile
唯一不幸的是,这些项目是通过索引访问的,因此如果您想通过名称轻松访问它们,则需要构建一些查找表。