0

我是 SPFx PnPjs 的新手。我想在查询中使用 GroupBy,但在可视代码中看不到智能感知。这是我的查询:

var query = pnp.sp.web.lists.getByTitle("Employee").items.select("ID,Title").filter(filterstring).get();

输出我想要类似的东西:

var query = pnp.sp.web.lists.getByTitle("Employee").items.GroupBy("Title").select("ID,Title").filter(filterstring).get();

有什么建议我可以在上面的查询中使用“GroupBy”吗?

4

2 回答 2

1

在 pnp js 中无法使用 GroupBy,因为它不存在。

但是,您可以在 javascript 中获取数据后对数据进行分组。

例如,您有一些接口来存储结果数据,如下所示:

interface IData{
  Id: number;
  Title: string;
}

interface IGroups{
    Title: string;
    Ids: number[];
}

在获得请求响应后,您将创建对象数组

let result: IData[] = [];

query.then((items)=>{
    items.map((item)=>{
      result.push({Id: item.ID, Title: item.Title});
    });
});

在此之后,您将获得未分组的数据,您可以通过过滤对其进行分组:

let groups: IGroups[] = [];
result.map((item)=>{
   //get only titles for grouping
   return item.title;
}).filter((value, index, self)=>{
    //get unique values
    return self.indexOf(value)===index
}).map((item)=>{
    //Here you get distinct title - you groups
    //and creating groups
    groups.push({
        Title: item,
        Ids: result.filter((r)=>{return r.title === item})
    });
});
于 2021-03-13T08:25:58.953 回答
0

SharePoint Rest API 不支持,您可以在此处GroupBy获取所有支持的 OData 查询操作。

PNP js 是对 Sharepoint Rest API 的封装,所以目前还不支持 group。

作为一种解决方法,您可以在返回值中过滤掉所需的项目。Array.prototype.filter()

于 2021-03-15T08:18:49.673 回答