4

我在远程计算机上的数据集中有一个非常大的数据集(1,000,000 多个客户)。此数据存储在一个平面文件中,并通过客户编号查找,该客户编号是文件中的偏移量。我想提供对这个集合的 oData 访问,但我只想提供读取单个实体的能力。

权限方面,很容易让 WCF 使用以下内容将其限制为单次读取:

config.SetEntitySetAccessRule("Customer", EntitySetRights.ReadSingle);

我遇到的问题是我被迫返回一个 IQueryable 接口,这似乎需要我收集整个数据集。是否有我遗漏的东西,或者有没有办法只收集评估 IQueryable 时所需的记录,我知道(由于 oData 权限)将需要单个记录提取?

4

1 回答 1

1

IQueryable 和 IEnumerable 非常不同 - 无需过多介绍,IQueryable 允许您构建由查询提供程序(在服务器上)执行并仅返回结果(在您的情况下为单个实体)的查询表达式。您仍然会受到在服务器端检查整个数据集的影响,但我不确定在您的场景中如何避免这种情况。

有关 IEnumerable 和 IQueryable 之间区别的更多详细信息,请参阅此处的答案:https ://stackoverflow.com/a/252789/981304 。具体来说,“...IQueryable 允许内存不足的事物,例如远程数据源,例如数据库或 Web 服务。”

于 2012-06-29T03:08:57.010 回答