我试图找到一个优化的方法来处理LINQ查询和调用SPQuery的select语句。有问题的案例是:我有一个文档库,必须关闭5000多个文档(排列在文件夹中),并且我有一个全局缓存,其中包含查询和缓存为“文档”自定义实体的所选元数据的所有文档详细信息。我们的业务用户通常以合适的频率更新文档库,并且可以使用代码清除并重新创建此缓存。
现在我正在编写一个新UI,用于选择和获取与特定“关键字”(元数据)匹配的所有文档。我有两个选择 1)对文档库执行CAML查询,该文件库将把结果作为SPListItem获取,我需要将其转换为“Document”实体(大约8个公共元数据元素)
OR
2)使用LINQ查询这个大文档库缓存并获取生成的“文档”实体。
从SharePoint角度来看哪些技术解释更好,为什么会有很大帮助。
Plesae随时可以质疑我的案例以获取更多信息
提前谢谢 干杯答案 0 :(得分:1)
如果您只想获取缓存的项目并且不需要访问数据库,那么显然您最好的选择是查询缓存的文档实体。
另一方面,如果您需要从SharePoint获取实体,那么我建议您首先使用SPQuery获取项目。
我在为SharePoint数据访问编写的存储库类中实现了类似的功能。
ICollection<Document> list =
web.Lists[documentLibraryName].GetItems(query).Cast<SPListItem>().Select(
doc => new Document(
doc["Title"].ToString(),
doc["Size KB"].ToString())).ToList();
以上与我的代码略有不同,但它概述了在执行查询后转换为Document实体的简洁方法。
答案 1 :(得分:0)
如果您想利用缓存以获得更好的性能,我认为您也可以使用PortalSiteMapProvider。
PortalSiteMapProvider.GetCachedListItemsByQuery 方法可用于查询列表并缓存查询结果。但是,如果查询每次返回不同的数据集,则应避免使用它。有关详细信息,请查看以下内容:
http://extreme-sharepoint.com/2012/07/17/data-access-via-caml-queries/