OData 获取更多列,无需重新获取已获取的列
OData to fetch more columns, without refetching already fetched columns
我有一个要求,我们必须执行某些过滤操作并隐藏和显示大量数据中的某些列,为了获得更好的性能,我想尝试一下 OData。
我浏览了一些博客,其中提到使用 OData 我们可以动态构建查询,如果假设我们有特定的编号,这将有所帮助。列的显示从而只获取那些列。
在这里我发现了一个新场景,在这个场景中,如果 UI 我们提供了 select 更多列的选项,那么最初我们会显示一组特定的列(假设 25 列),然后 selection 我们需要显示那些新添加的列(另外 10 列)的数据。因此,按照 ODATA 方法,我将创建一个包含所有列(25 个旧列 + 10 个新列)的新查询,这将再次获取所有 35 个列。现在,由于已经获取了 25 列的数据,因此有一种方法可以从同一个 API 调用中仅获取新需要的列,这将带来所有 35 列数据,而无需重新获取已经存在的 25 列数据。
如果我获取新的列数据并执行一些连接操作并显示最终数据,则可以完成此操作。 (您可能会觉得这很愚蠢)但是这个问题的动机是 OData 是否以某种方式跟踪已经获取的数据,以便它只会获取新需要的数据。
我认为您可以检查您的对象是否已经包含一列。如果没有,则将其添加到列表中并再次向 api.
发送请求
示例:
var data: any;
var columns = ['col1', 'col2', ... 'col35']
var initialQueryParams = columns.slice(0, 20) // get only 20 columns
// 1. initial query :
api/controller/method?queryParam$select(id, col1, col2, ... col20)
// data = result of api request
var newCols: string[] = [];
//2. check if your obj contain cols 'col21' ... 'col35'
(!data[0].hasOwnProperty('col21')) {
// if not, add to list
newCols.push('col21');
}
// - second query:
api/controller/method?queryParam$select(id, newCols)
data.forEach(item => {
data['col21'] = result['col21'];
...
data['col35'] = result['col35'];
});
对于所有请求,您需要有一个主键 id,它将随任何请求一起发送。
你需要稍微调整查询字符串,我提醒的不是很完美
我有一个要求,我们必须执行某些过滤操作并隐藏和显示大量数据中的某些列,为了获得更好的性能,我想尝试一下 OData。
我浏览了一些博客,其中提到使用 OData 我们可以动态构建查询,如果假设我们有特定的编号,这将有所帮助。列的显示从而只获取那些列。
在这里我发现了一个新场景,在这个场景中,如果 UI 我们提供了 select 更多列的选项,那么最初我们会显示一组特定的列(假设 25 列),然后 selection 我们需要显示那些新添加的列(另外 10 列)的数据。因此,按照 ODATA 方法,我将创建一个包含所有列(25 个旧列 + 10 个新列)的新查询,这将再次获取所有 35 个列。现在,由于已经获取了 25 列的数据,因此有一种方法可以从同一个 API 调用中仅获取新需要的列,这将带来所有 35 列数据,而无需重新获取已经存在的 25 列数据。
如果我获取新的列数据并执行一些连接操作并显示最终数据,则可以完成此操作。 (您可能会觉得这很愚蠢)但是这个问题的动机是 OData 是否以某种方式跟踪已经获取的数据,以便它只会获取新需要的数据。
我认为您可以检查您的对象是否已经包含一列。如果没有,则将其添加到列表中并再次向 api.
发送请求示例:
var data: any;
var columns = ['col1', 'col2', ... 'col35']
var initialQueryParams = columns.slice(0, 20) // get only 20 columns
// 1. initial query :
api/controller/method?queryParam$select(id, col1, col2, ... col20)
// data = result of api request
var newCols: string[] = [];
//2. check if your obj contain cols 'col21' ... 'col35'
(!data[0].hasOwnProperty('col21')) {
// if not, add to list
newCols.push('col21');
}
// - second query:
api/controller/method?queryParam$select(id, newCols)
data.forEach(item => {
data['col21'] = result['col21'];
...
data['col35'] = result['col35'];
});
对于所有请求,您需要有一个主键 id,它将随任何请求一起发送。
你需要稍微调整查询字符串,我提醒的不是很完美