簡體   English   中英

Linq查詢中的SharePoint查找(與計數相關)值

[英]SharePoint Lookup (Count Related) value in Linq Query

我有兩個列表,帖子和評論。 評論在“帖子”列表中具有一個“查找”列,而“帖子”具有返回到“評論”列表的“查找(計數相關)”關系。 我想做的只是在每個帖子中顯示評論數。 出於某種原因,我無法使用實體引用執行此操作。

我有一個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投影整個實體。

有任何想法嗎? 我以為這很簡單,但也許我遺漏了一些東西。

Linq-to-Sharepoint不支持聯接。 共享點列表不是實際數據庫中的單獨表,共享點的實際數據模型也不是重點,但是您應該記住,在CAML中,邏輯上廉價的操作本身在CAML中並不是那么容易,並且每個Linq-to-Sharepoint查詢最終都會轉換為CAML。

無論如何,聯接沒有實現。 您可以使用查閱列的Entity來獲取數據,但是在后台,這總是作為不同的查詢來實現的,以我的經驗,您不能對這些查閱實體使用任何聚合或其他多記錄操作,包括計數()。

解決這個問題的方法可能不錯,因為count是一個簡單的功能。 我會嘗試將要計數的屬性轉換為數組(或類似數組),並使用其長度或計數。

通常,解決這些問題的方法是在代碼中進行數據處理並依賴相當粗略的查詢。 通過花一些心思選擇正確的數據結構,您可以真正加快操作速度。 在某些情況下,即使在第一種情況下,查詢產生了到數據庫的一定數量不必要的數據通信,我在代碼處理方面的性能都比在linq-to-sharepoint查詢解決方案中的性能要好。

還有一件事:如果您打算最終使用CAML或代碼生成共享點列表,並且僅在開發過程中使用“單擊”內容類型/列表,請記住在這些情況下SPMetal生成的類有所不同。 更具體地說,查找字段不是表示為Entity類,而是表示為兩個普通字段,分別帶有項目ID和一個帶有標題(更像SPListItem)。 而且,反向查找實體集根本不存在。 我還沒有看到有關此文檔,但是我已經經歷了。 因此,如果您打算使用CAML生成的網站,則可能需要重新考慮一些查詢。 可能有解決方法,但以我的經驗,無論如何,查找實體(集合)都非常慢,因此最好使用普通的linq查詢。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM