我有具有零到很多孩子的表。就像这个网站如何具有QUESTION其可具有零到许多VOTES(向上== 1或向下== 0)。

我需要得到的拥有最选票的所有问题。例如。所有的问题,通过总和(投票)下降。有序

我不知道怎么做,在LINQ。

,所以我将有一个EntitySet的称为问题和另一EntitySet的称为票。

我试着做群,让秩序的,没有什么编译:(

谁能有什么建议吗?

有帮助吗?

解决方案

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;

其他提示

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

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

由于您使用的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);

我在这里聚集数()实际上是你想要的吗?总和()将产生相同的,但也许不是作为meaningfull(?)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top