0

投稿とコメントの 2 つのリストがあります。コメントには投稿リストへのルックアップ列があり、投稿にはコメント リストへのルックアップ (カウント リレート) 関係があります。私がやろうとしているのは、各投稿のコメント数を表示することです。何らかの理由で、エンティティ参照でこれを行う方法がわかりません。

私は 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は結合をサポートしていません。共有ポイントリストは実際のデータベース内の個別のテーブルではなく、共有ポイントの実際のデータモデルは重要ではありませんが、プレーンSQLでの論理的で安価な操作自体はCAMLではそれほど簡単ではないことに注意してください。すべてのLinqからSharepointへのクエリは、最終的にCAMLに変換されます。

とにかく、結合は実装されていません。ルックアップ列のエンティティを使用してデータを取得できますが、バックグラウンドではこれは常に別のクエリとして実装され、私の経験では、これらのルックアップエンティティに対して集計またはその他のマルチレコード操作を使用することはできません。カウント()。

countはとても簡単な関数なので、おそらくこれを回避する良い方法があります。カウントしたいプロパティを配列(または同様のもの)に変換し、その長さまたはカウントを使用してみます。

一般に、これらの問題を回避する方法は、コードでデータ処理を行い、かなり大雑把なクエリに依存することです。また、正しいデータ構造の選択に注意を払うことで、操作を非常に高速化できます。最初のケースのクエリではデータベースへの不要なデータトラフィックが一定量生成されましたが、コード処理の方がlinq-to-sharepointクエリソリューションよりもパフォーマンスが向上する場合がありました。

もう1つ:最終的にCAMLまたはコードを使用してSharepointリストを生成する予定であり、開発中にのみ「クリックされた」コンテンツタイプ/リストを使用する場合は、これらの場合にSPMetalが生成するクラスに違いがあることに注意してください。より具体的には、ルックアップフィールドはエンティティクラスとしてではなく、2つの通常のフィールドとして表されます。1つはアイテムIDで、もう1つはタイトルで表されます(SPListItemのように)。また、逆引き参照エンティティセットはまったく存在しません。私はこれについての文書を見たことがありませんが、私はそれを経験しました。したがって、CAMLで生成されたサイトを使用する場合は、クエリの一部を再考する必要があります。回避策があるかもしれませんが、私の経験では、ルックアップエンティティ(セット)はとにかく非常に遅いので、通常のlinqクエリを使用することをお勧めします。

これがお役に立てば幸いです。

于 2011-04-22T23:03:07.387 に答える