Sharepoint - LINQ vs Direct SPQuery



我试图找到一个优化的方法与LINQ查询工作vs调用SPQuery的选择语句。所讨论的情况是:我有一个文档库,它必须关闭5000多个文档(排列在文件夹中),并且我有一个全局缓存,用于查询和缓存为"document"自定义实体的选定元数据的所有文档详细信息。我们的业务用户通常以适当的频率更新文档库,并且可以使用代码清除和重新创建此缓存。

现在我正在编写一个新的UI,它将选择并获取与特定"关键字"(元数据)匹配的所有文档。我有两个选择1)对文档库执行CAML查询,该查询将获取我需要转换为"文档"实体(大约8个公共元数据字符串)的SPListItem结果

2)使用LINQ查询这个大文档库缓存并获取结果"document"实体。

从SharePoint的角度,任何关于哪个更好的技术解释都会大有帮助。

请随时向我的案例提问以获取更多信息

提前感谢欢呼声

如果您只想获得缓存项,而不需要访问数据库,那么显然您最好的选择是查询缓存的Document实体。

另一方面,如果你需要从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();

上面的代码与我的代码略有不同,但它概述了一种简洁的方法,可以在执行查询后转换为文档实体。

我认为你也可以使用PortalSiteMapProvider,如果你想利用缓存来获得更好的性能。

适应你。getcachedlisttitemsbyquery 方法可以用于查询列表,也可以缓存查询结果。但是,如果查询每次返回不同的数据集,则应避免使用它。有关更多细节,请查看:

http://extreme-sharepoint.com/2012/07/17/data-access-via-caml-queries/

最新更新