2012-06-16 63 views
1

我得到了兩個表:評論和評論登錄 在同一個查詢中,我計算用戶對評論的評論。Linq查詢選擇計數到同一個實體

我得到了以下(簡化)查詢:

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中做到這一點?

+0

的問題是不是計數(我不想概括起來講,我想算每個評論,每個評論),這是關於將計數放入創建的評論對象中。 –

回答

2

你不能那樣做。 EF不支持將項目(= select)數據輸入到實體中。查詢執行完畢後,您必須在內存中填寫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; 
      }); 
+0

謝謝,我這麼想。 –