Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Linq查询中的SharePoint查找(计数相关)值_.net_Linq_Sharepoint_Linq To Sharepoint - Fatal编程技术网

.net Linq查询中的SharePoint查找(计数相关)值

.net Linq查询中的SharePoint查找(计数相关)值,.net,linq,sharepoint,linq-to-sharepoint,.net,Linq,Sharepoint,Linq To Sharepoint,我有两个列表,帖子和评论。评论在帖子列表中有一个查找列,帖子与评论列表之间有一个查找(计数关联)关系。我想做的就是在每篇文章中显示评论的数量。由于某种原因,我不知道如何使用实体引用来实现这一点 我有一门档案课: public class ArchiveItem { public string Id { get; set; } public string Title { get; set; } public string Commen

我有两个列表,帖子和评论。评论在帖子列表中有一个查找列,帖子与评论列表之间有一个查找(计数关联)关系。我想做的就是在每篇文章中显示评论的数量。由于某种原因,我不知道如何使用实体引用来实现这一点

我有一门档案课:

    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对完整实体的投影


有什么想法吗?我原以为这很简单,但也许我遗漏了什么。

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

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

也许有一个很好的解决方法,因为计数是一个非常简单的函数。我会尝试将要计数的属性转换为数组(或类似的),并使用该数组的长度或计数

通常,解决这些问题的方法是在代码中进行数据处理,并依赖于相当粗糙的查询。通过谨慎选择正确的数据结构,您可以很好地加快操作速度。有几次,我体验到代码处理的性能优于linq到sharepoint查询解决方案,即使第一种情况下的查询会对数据库产生一定数量的不必要的数据流量

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

我希望这有帮助