LINQ - 如何选择和计算正确的结果

时间:2011-11-08 02:55:47

标签: linq

我有3张桌子:DiaryPosts,DiaryImpressions,Impressions。

印象是一个包含一些字段的小列表:'喜欢','不喜欢','同意','不同意'。用户可以根据他对帖子的看法进行投票。

DiaryImpressions是处理帖子和投票用户之间关系的表格。

我的问题是,我必须计算每个帖子的每个印象投票的结果,所以也许一个帖子的13个用户投票赞成,2个不喜欢,34个同意和1个不同意。

我不知道如何以某种方式执行查询我可以获得每次展示的特定计数结果。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

您可以通过GroupBy方法执行此操作。它允许您根据展示自动“分组”元素,并计算每组的结果。

答案 1 :(得分:0)

var post(from c in posts selec c)

string post1like;
string post2dislike;
string postagree3;
string postdisagree3;


foreach (var item in posts)

{
  var ipressionslike=(from c in imressions where impressioid=item.id where c.impressionID='LIKE' select c.userID).Tolist()
   var ipressionsdislike=(from c in imressions where impressioid=item.id where c.impressionID='disLIKE' select c.userID).Tolist()   
  var ipressionslike=(from c in imressions where impressioid=item.id where c.impressionID='LIKE' select c.userID).Tolist()
   var ipressionsagree=(from c in imressions where impressioid=item.id where c.impressionID='disLIKE' select c.userID).Tolist()  
post1like+=item.id+""+ipressionsdislike.count;
post2dislike+=item.id+""+ipressionslike.count;
postagree3+=item.id+""+ipressionsagree.count;
}

它应该计算每个帖子的展示次数并计算喜欢或不喜欢的用户数量,所以如果你有30个人不喜欢每个帖子它应该得到它们我看不到你的表结构但我希望它会帮助或指向你某处

答案 2 :(得分:0)

我必须猜测,但我认为这就是SQL的样子:

SELECT I.Name, COUNT(I.Name)
FROM DairyPosts P
JOIN DairyImpressions DI ON P.ID=DI.DairyID
JOIN Impressions I ON DI.ImpressionsID = I.ID

linq会是什么样子:

List<Dairy> dairyposts = GetDairyPosts();
var impressionCounts =
    from p in dairyposts
    group p by p.ImpressionName into g
    select new { Type = g.Key, ImpressionCount = g.Count() };

当然,我必须假设您的列表是以某种方式创建的,如果您可以发布实际创建的列表将有所帮助。 (正如我在评论中所说)