LINQ to SQL的加入和点心(LINQ to SQL Join and Sum)

2019-09-24 01:00发布

任何人都可以LINQ下面的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,量

Answer 1:

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}

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

由于运给我个理由,使用let操作,最终实现它的美丽。 你与你的问题让我非常,只是要求它。 +1了点。



Answer 2:

这就是我现在有,但它缺少由总的顺序。

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)}


Answer 3:

试试下面的代码。 因为这是为我工作。

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


文章来源: LINQ to SQL Join and Sum