QUESTION
,它可以有0到多个VOTES
(Up == 1或Down == 0)。
我需要所有投票最多的问题。例如。所有问题,由Sum(投票)降序排列。
我不知道如何在linq中做到这一点。
所以我会有一个名为Questions的EntitySet和另一个名为Votes的EntitySet。
我试图按照分组进行排序并且没有任何编译:(
有人可以提出任何建议吗?
答案 0 :(得分: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;
答案 1 :(得分: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);
}
答案 2 :(得分: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()会产生相同的结果,但也许不是有意义的(?)