F# 和 PnP SharePoint

F# and PnP SharePoint

我是 F# 的新手,正在尝试重新创建我过去使用 C# 或 Powershell 构建的一些简单应用程序。我正在尝试获取网络的多个属性。 在 F# 中,我可以获得一个 属性,但我不确定一次获取多个属性的语法是否有效。

举个例子:

// F# Example
context.Load(web |> fun w->w.Lists)
context.Load(web |> fun w->w.AssociatedOwnerGroup)
context.ExecuteQuery()

F# 中有没有办法将其组合成一行? 在 C# 中,我会这样称呼它:

// C# Example
context.Load(web, w => w.Lists, w => w.AssociatedOwnerGroup);
context.ExecuteQuery();

您调用的函数似乎是 ClientRuntimeContext.Load<T>,它具有以下 C# 签名:

public void Load<T>(
    T clientObject,
    params Expression<Func<T, Object>>[] retrievals
)
where T : ClientObject

此处有两个问题使得此函数难以从 F# 调用:params 数组和自动转换为 LINQ 表达式。 F# 分别支持这些,但当您有多个参数时,自动转换似乎不起作用。相反,我认为你必须手动完成,像这样:

// automatically quotes a function
type Expr = 
    static member Quote<'t>(f : Expression<Func<'t, obj>>) = f

// quote the functions
let funcs =
    [|
        fun (w : SPWeb) -> w.Lists
        fun (w : SPWeb) -> w.AssociatedOwnerGroup
    |] |> Array.map Expr.Quote

// call the Load function
context.Load(web, funcs)

抱歉,我知道那很丑。可能有更好的方法,但我不知道它是什么。