2009-08-17 2 views
1

Может ли LINQ использовать следующий SQL?LINQ to SQL Join и Sum

Я был на этом в течение двух часов, и я не ближе к этому, чем когда был, когда начал.

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

Голосов: идентификатор, сумма

ответ

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 

Я не совсем уверен в OrderBy части, за дело, я не уверен насчет остальных либо, поскольку я не в состоянии проверить это. Если он не работает, не вините меня, пожалуйста :)

Update: Используя работу 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} 

Редактировать исправили OrderBy использовать нисходящий порядок.

Благодаря op, который дает мне основание использовать оператора let и, наконец, осознает его красоту. Вы очень помогли мне с вашим вопросом, просто спросив его. +1 для этого.

+0

Femaref, спасибо за ответ, но я получаю ") или конец ожидаемых выражений" после articleVote.ArticleId. – griegs

+1

Вам необходимо добавить запятую: "ArticleId = art.ArticleId, VoteCount = ..." также необходимо исправить порядок. Я отвечу, чтобы показать все. –

+0

Ум, где ответ Рида пошел? Похоже, что они были удалены. Неважно, даже в том, что у него была такая же проблема, что ожидалось: а) у энмида групповой линии. – griegs

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();