문제

나는 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 ()는 동일하게 생성되지만 아마도 의미가없는 것은 아닙니다 (?)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top