我正在尝试寻找一种优化的方法来处理LINQ查询,而不是为select语句调用SPQuery。问题是:我有一个文档库,它必须关闭5000+文档(排列在文件夹中),并且我有一个全局缓存,其中包含所选元数据的所有文档详细信息,并将其作为" document“自定义实体进行查询和缓存。我们的业务用户通常会以适当的频率更新文档库,并且可以使用代码来清除和重新创建此缓存。
现在,我正在编写一个新的UI,它将选择和获取与特定“关键字”(元数据)匹配的所有文档。我有两种选择: 1)对文档库执行CAML查询,将结果作为SPListItem获取,我需要将其转换为“文档”实体(大约8个公共的元数据字符串)。
或
2)使用LINQ查询这个大的文档库缓存,并获取结果“文档”实体。
从SharePoint的角度来看,任何关于哪个更好以及为什么更好的技术解释都会有很大帮助。
请随时询问我的情况,以获得更多信息
提前感谢干杯
发布于 2011-07-25 22:30:44
如果您只想获取缓存的项,而不需要访问数据库,那么显然您最好的选择是查询缓存的文档实体。
另一方面,如果您需要从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();上面的代码与我的代码略有不同,但它概述了一种在执行查询后转换为文档实体的简洁方法。
发布于 2012-07-22 09:14:27
我认为如果你想利用缓存来获得更好的性能,你也可以使用PortalSiteMapProvider。
PortalSiteMapProvider.GetCachedListItemsByQuery方法可以用来查询列表,也可以缓存查询结果。但是,如果您的查询每次返回不同的数据集,则应该避免使用它。有关更多详细信息,请查看以下内容:
http://extreme-sharepoint.com/2012/07/17/data-access-via-caml-queries/
https://stackoverflow.com/questions/6813410
复制相似问题