문제
나는 0에서 많은 아이들을 가진 테이블을 가지고 있습니다.이 사이트와 마찬가지로 QUESTION
0부터 다수까지 가질 수 있음 VOTES
(위로 == 1 또는 아래로 == 0).
나는 얻을 필요가있다 가장 많은 표를 얻은 모든 질문.예.모든 질문은 Sum(Vote) 내림차순으로 정렬됩니다.
linq에서는 어떻게 해야할지 모르겠습니다.
그래서 저는 Question이라는 EntitySet과 Votes라는 또 다른 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입니까? 참조가 올바르게 설정되어 있고 투표권이 있다고 가정합니다.
(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 ()는 동일하게 생성되지만 아마도 의미가없는 것은 아닙니다 (?)
제휴하지 않습니다 StackOverflow