2011-12-03 33 views
1

我有一个帖子列表,我有一个意见列表,有4个意见的用户可以为每个帖子投票。C#Foreach循环无法按预期工作

这就像:

POST1 
Vote (opinion A | 10 votes), vote (opinion B | 2 votes), vote (opinion C | 1 votes), vote (opinion D | 0 votes) 

POST2 
Vote (opinion A | 3 votes), vote (opinion B | 4 votes), vote (opinion C | 5 votes), vote (opinion D | 7 votes) 

每篇文章在他或她的日记任何用户的帖子,其他用户可以投票1点意见。

在我控制我这一行,以获得日记的帖子:

var diaryPosts = (from d in db.DiaryPosts 
        join e in db.EstadosDeAlma 
        on d.EstadosDeAlmaID equals e.ID 
        join u in db.User 
        on d.UserID equals u.ID 
        orderby d.ID descending 
        select new DiaryPostsSet 
        { 
         PostID = d.ID, 
         EstadoDeAlmaID = e.ID, 
         EstadoDeAlma = e.Title, 
         Author = u.Nickname, 
         Thumbnail = u.Thumbnail, 
         AuthorComment = d.Content, 
         Time = d.UpdateTime }).Take(6).ToList(); 

,我要尽量采取对每个DiaryPost,其意见票,这里是我的问题。我有这样的:

List<ImpressionsSet> impressions = new List<ImpressionsSet>(); 

foreach (var item in diaryPosts) 
{ 
    impressions = (from i in db.Impressions 
        select new ImpressionsSet 
        { 
         ImpressionID = i.ID, 
         ImpressionTitle = i.Impression, 
         UrlSlug = i.UrlSlug, 
         DiaryPostID = item.PostID, 
         ImpressionNum = i.DiaryImpressions.Count(d => d.DiaryPostsID == item.PostID) 
        }).ToList(); 
} 

但'印象'var只获取最后一个循环。我不知道如何解决这个问题,因为我在C#4.0中只有很少的数组和列表经验。我不知道我是否可以像印象[n]那样使用它,我试过了,它不起作用。

我还需要一个示例代码,说明如何在Razor视图中控制此循环的结果。 我有现在这样:

@foreach (var imp in ViewBag.ImpressionsList) 
{ 
    if (item.PostID == imp.DiaryPostID) 
    { 
    <td> 
     @{ string cbName = imp.UrlSlug; } 
     @{ string impression = imp.ImpressionTitle; } 
     @{ string value = imp.DiaryPostID + "|" + imp.ImpressionID + "|" + Session["id"].ToString(); } 
     <a class="voto" href="javascript:;" onclick="PostImpressions('@value')">@impression</a> 
    </td> 
    <td> 
     <a class="num" href="javascript:;" onclick="PostImpressions('@value')">@imp.ImpressionNum</a> 
    </td> 
    } 
} 

但我不知道这是否会真正的工作,因为我不要有在我的印象VAR的2个职位的结果,它只是得到最后的结果。

任何人都可以帮助我吗?的

回答

1

代替:

impressions = ... 

impressions.AddRange((from i in db.Impressions 
       select new ImpressionsSet 
       { 
        ImpressionID = i.ID, 
        ImpressionTitle = i.Impression, 
        UrlSlug = i.UrlSlug, 
        DiaryPostID = item.PostID, 
        ImpressionNum = i.DiaryImpressions.Count(d => d.DiaryPostsID == item.PostID) 
       }).ToList()); 
+0

THANK YOU = d @Klaus –