Sharepoint - LINQ vs Direct SPQuery

时间:2011-07-25 08:28:39

标签: linq sharepoint

我试图找到一个优化的方法来处理LINQ查询和调用SPQuery的select语句。有问题的案例是:我有一个文档库,必须关闭5000多个文档(排列在文件夹中),并且我有一个全局缓存,其中包含查询和缓存为“文档”自定义实体的所选元数据的所有文档详细信息。我们的业务用户通常以合适的频率更新文档库,并且可以使用代码清除并重新创建此缓存。

现在我正在编写一个新UI,用于选择和获取与特定“关键字”(元数据)匹配的所有文档。我有两个选择 1)对文档库执行CAML查询,该文件库将把结果作为SPListItem获取,我需要将其转换为“Document”实体(大约8个公共元数据元素)

OR

2)使用LINQ查询这个大文档库缓存并获取生成的“文档”实体。

从SharePoint角度来看哪些技术解释更好,为什么会有很大帮助。

Plesae随时可以质疑我的案例以获取更多信息

提前谢谢 干杯

2 个答案:

答案 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/