2009-08-17 65 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();