【发布时间】:2021-02-24 12:06:19
【问题描述】:
我对 OData v3/v4 还是很陌生,我使用 Visual Studio 中的 OData Connect 服务从 OData 服务器获取数据。现在我的问题是什么是获取数据的最佳、最快的方法,然后使用自己的集合进行验证?
例如,我们有一个Microsoft.OData.Client.DataServiceQuery 类型为Employee,我们想从服务器获取所有员工并将其与我们的本地数据集(例如来自另一个CRM 系统的List(Of Employee))进行比较
要从 OData 服务获取数据,我们必须设置 DataServiceQuery,例如:获取所有员工的简单方法是 DataServiceQuery.GetAllPages,这会返回一个 IEnumerable(Of Employee),我们可以在其上调用 .ToList 函数。在此之后,我们可以使用 LINQ 和/或 LAMBDA 在两个列表之间进行每次比较和更新集合。
但是现在如果我使用DataServiceQuery.Take(Number) 更改方法,那么它会返回一个IQueryable(Of Employee),我们也可以在其上调用.ToList 或者IQueryable 是否不必要?
所以我的问题是从 OData v4 服务器获取所有数据然后将其填充到内存中然后使用 LINQ 和/或 LAMBDA 进行比较的最佳方法是什么?
【问题讨论】:
-
如果您只需要迭代一次数据(与其他列表比较就足够了),则使用
ToList效率低下,因为除了数据服务的缓冲区之外,您还必须为所有数据分配缓冲区用途。如果您受到限制并且无法更改比较您的列表并将一个列表更改为IEnumerable<T>的方法,或者不关心内存和性能,只需在两者上使用ToList。
标签: c# linq query-optimization odata-v4