1

コメントとcommentLikesの2つのテーブルがあります。同じクエリで、ユーザーがコメントに付けたいいねを数えます。

次の(簡略化された)クエリを取得しました:

var res = (from c in db.Comments
                           where c.Topic.ID == topicID
                           select new
                           {
                               comment = c,
                               count = c.CommentLikes.Count()
                           }).ToList();

ただし、likecountをコメントエンティティに再度マッピングするのではなく、LikeCountフィールドのみを含むコメントのリストを取得したいと思います。できれば効率的なクエリを使用してください。このようなもの:

   var res = (from c in db.Comments
                               where c.Topic.ID == topicID
                               select new
                               {
                                   comment = c,
                                   c.LikeCount = c.CommentLikes.Count()
                               }).ToList();

このクエリはコンパイルされません。

linqでこれを行う方法は?

4

1 に答える 1

2

あなたはそれをすることはできません。selectEFは、データをエンティティに投影(=)することをサポートしていません。LikeCountクエリの実行後、プロパティをメモリに入力する必要があります。コンパクトな方法で記述できますが、基本的にはforeach、マテリアライズされた匿名オブジェクトのループにすぎません。

IEnumerable<Comment> res =
          (from c in db.Comments
           where c.Topic.ID == topicID
           select new
           {
               comment = c,
               count = c.CommentLikes.Count()
           })
           .ToList() // DB query runs here, the rest in memory
           .Select(a => {
               a.comment.LikeCount = a.count;
               return a.comment;
           });
于 2012-06-17T00:06:02.817 に答える