2009-08-17 66 views
1

任何人都可以LINQ下列SQL?LINQ to SQL加入和求和

我已经在这上了两个小时了,而且我还没有比开始时更接近这个。

SELECT ArticleId, sum(Amount) AS VoteCount 
FROM ArticleVotes INNER JOIN 
Votes ON ArticleVotes.voteId = Votes.id 
GROUP BY ArticleVotes.articleId 
ORDER BY VoteCount DESC 

表如下;

ArticleVotes:条款ArticleID,VoteId

投票:ID,量

回答

4
from articleVote in ArticleVotes 
join vote in Votes on art.voteId equals vote.id 
group articleVote by artarticleVote.articleId 
select new 
{ 
ArticleId = art.ArticleID, 
VoteCount = Votes.Sum(vote.amount) 
} 
orderby VoteCount 

我不能完全肯定的排序依据部分,针对此事,我不知道其他的不是,因为我不能测试它。如果它不工作,就不要怪我请:)

更新:使用OP的工作:

from artVotes in ArticleVotes 
join vote in Votes on artVotes.VoteId equals vote.Id 
group artVotes by artVotes.ArticleId into g 
let totalAmount = g.Sum(p => p.Vote.Amount) 
orderby totalAmount descending 
select new { ArticleId = g.Key, total = totalAmount} 

编辑固定的排序依据使用的降序排列。

感谢op给了我使用let运算符的理由,并最终实现了它的美。只要问问题,你对我的问题给予了极大的帮助。 +1。

+0

Femaref,谢谢你的回答,但我得到了“)或期末表达式的结尾”after articleVote.ArticleId。 – griegs 2009-08-17 00:25:57

+1

您需要添加一个逗号:“ArticleId = art.ArticleId,VoteCount = ...”也需要通过修正订单。我会回答,以显示这一切。 – 2009-08-17 00:29:58

+0

恩,里德的答案是从哪里来的?看起来已被删除。无论如何,即使这样也会遇到同样的问题,因为它期望:a)在集团线以下。 – griegs 2009-08-17 00:48:49

0

这是我现在所拥有的,但是它缺少了总数的顺序。

from artVotes in ArticleVotes 
join vote in Votes on artVotes.VoteId equals vote.Id 
group artVotes by artVotes.ArticleId into g 
select new { ArticleId = g.Key, total = g.Sum(p => p.Vote.Amount)} 
0

请尝试以下代码。因为它在为我工作。

      var credit = (from bm in BulkMessage 
          join sms in SMS on bm.BulkMessageId equals sms.BulkMessageId 
          where bm.ProfileId == pid && bm.IsActive == true 
          group sms by sms.SMSCredit into g 

          select new { SMSCredits = g.Sum(s => s.SMSCredit) }).FirstOrDefault(); 

          string totalCredit=credit.SMSCredits.ToString();