题
我有具有零到很多孩子的表。就像这个网站如何具有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(?)
不隶属于 StackOverflow