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)
抱歉,我知道那很丑。可能有更好的方法,但我不知道它是什么。
我是 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)
抱歉,我知道那很丑。可能有更好的方法,但我不知道它是什么。