0

我有两个列表,帖子和评论。Comments 有一个到 Posts 列表的 Lookup 列,并且 Posts 有一个 Lookup (Count Relate) 关系回到 Comments 列表。我要做的只是显示每个帖子中的评论数。出于某种原因,我无法使用实体引用来执行此操作。

我有一个 ArchiveItem 类:

    public class ArchiveItem
    {
        public string Id { get; set; }
        public string Title { get; set; }
        public string Comments { get; set; }
        public string Date { get; set; }
    }

然后是我试图运行的查询:

        var queryItems = from item in spotlightItems
                         join comment in commentItems on item.Title equals comment.Title
                         select new ArchiveItem
                         {
                             Id = item.Id.ToString(),
                             Title = item.Title,
                             Comments = comment.Post.Title.Count().ToString(),
                             Date = item.Date.ToString()
                         };

我尝试了几种不同的方法并收到各种错误消息。这个特定的版本给了我

查询使用不受支持的元素,例如对多个列表的引用,或使用 EntityRef/EntitySet 投影完整实体。

有任何想法吗?我认为这会很简单,但也许我错过了一些东西。

4

1 回答 1

0

Linq-to-Sharepoint 不支持连接。sharepoint 列表不是实际数据库中的单独表,sharepoint 的实际数据模型不是重点,但您应该记住,在普通 SQL 中的逻辑和廉价操作本身在 CAML 中并不那么容易,并且每个 Linq-to-Sharepoint 查询最终都会转换为 CAML。

无论如何,连接没有实现。您可以使用查找列的实体来获取数据,但在后台,这始终是作为不同的查询实现的,根据我的经验,您不能对这些查找的实体使用任何聚合或其他多记录操作,包括数数()。

可能有一个很好的方法来解决这个问题,因为 count 是一个非常简单的函数。我会尝试将您要计数的属性转换为数组(或类似的),并使用它的长度或计数。

一般来说,解决这些问题的方法是在代码中进行数据处理并依赖于相当粗略的查询。通过在选择正确的数据结构上投入一些精力,您可以非常好地加速操作。在某些情况下,我在代码处理方面体验到比 linq-to-sharepoint 查询解决方案更好的性能,尽管第一种情况下的查询产生了一定数量的不必要的数据库数据流量。

还有一件事:如果您计划最终使用 CAML 或代码生成 Sharepoint 列表,并且您仅在开发期间使用“点击”的内容类型/列表,请记住 SPMetal 在这些情况下生成的类存在差异。更具体地说,查找字段不表示为实体类,而是表示为两个普通字段,一个是项目 ID,一个是标题(更像是在 SPListItem 中)。此外,根本不存在反向查找实体集。我没有看到有关此的文档,但我经历过。因此,如果您计划使用 CAML 生成的站点,您可能需要重新考虑一些查询。可能有一种解决方法,但根据我的经验,查找实体(集)无论如何都非常慢,最好使用普通的 linq 查询。

我希望这有帮助。

于 2011-04-22T23:03:07.387 回答