2

我有一张有零到多个孩子的桌子。就像这个网站有一个QUESTION可以有零到多个VOTES(向上 == 1 或向下 == 0)的方式。

我需要得到所有投票最多的问题。例如。所有问题,按 Sum(Vote) 降序排列。

我不确定如何在 linq 中执行此操作。

所以我会有一个名为 Questions 的 EntitySet 和另一个名为 Votes 的 EntitySet。

我试图做 group by 和 let 和 order by 并且没有编译:(

请问有人有什么建议吗?

4

3 回答 3

3
myDataContext.Questions
  .OrderByDescending(q => q.Votes.Select(v => v.VoteValue).Sum())

在查询理解中(未选中):

from q in myDataContext.Questions
order q by 
(
  from v in q.Votes
  select v.VoteValue
).Sum() descending
select q;
于 2009-03-24T14:50:57.947 回答
2

这主要取决于您的数据,但这里有一个小样本:

XElement xdoc=XElement.Parse(@"
  <root>
    <question name=""A"">
      <vote type=""up"" />
      <vote type=""down"" />
    </question>
    <question name=""B"">
      <vote type=""up"" />
      <vote type=""up"" />
    </question>
    <question name=""C"" />
  </root>
  ");

var result=
  from q in xdoc.Elements("question")
  let votes=q.Elements("vote").Count(v=>v.Attribute("type").Value=="up")
  orderby votes descending
  select new
  {
    Name=q.Attribute("name").Value,
    Votes=votes
  };

foreach (var r in result)
{
  Console.WriteLine(r.Name+" "+r.Votes);
}
于 2009-03-24T07:22:53.157 回答
1

由于您使用的是EntitySet,我认为它是Linq2SQL?假设您已正确设置参考并具有 Vote.Question 属性:

(from v in dc.Votes
where v.IsUpVote // v.Vote == 1 (??)
group v by v.Question into q
select new { Question = q.Key, UpVotes = q.Count() }).OrderByDescending(e => e.UpVotes);

我在这里收集 Count() 实际上是您想要的吗?Sum() 会产生相同的结果,但可能没有意义l(?)

于 2009-03-24T14:47:04.820 回答