Frage

Ich habe eine Tabelle, die Null zu viele Kinder hat. wie, wie hat diese Seite eine QUESTION, die Null zu vielen VOTES (entweder nach oben == 1 oder nach unten == 0) haben kann.

Ich brauche zu bekommen alle Fragen, die die meisten up Stimmen haben . Z.B. alle Fragen, die von Sum (Abstimmung) absteigend geordnet.

Ich bin mir nicht sicher, wie es in Linq zu tun.

So würde ich ein EntitySet namens Fragen und andere EntitySet genannt Stimmen.

Ich habe versucht Gruppe zu tun durch und lassen Sie und Ordnung und nichts kompiliert: (

Kann jemand irgendwelche Vorschläge haben, bitte?

War es hilfreich?

Lösung

myDataContext.Questions
  .OrderByDescending(q => q.Votes.Select(v => v.VoteValue).Sum())

Bei der Abfrage Verständnis (nicht markiert):

from q in myDataContext.Questions
order q by 
(
  from v in q.Votes
  select v.VoteValue
).Sum() descending
select q;

Andere Tipps

Das meist auf Ihren Daten hängt aber hier ist ein kleines Beispiel:

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

Da Sie EntitySet verwenden entnehme ich, es ist Linq2SQL? Angenommen, Sie haben Referenzen ordnungsgemäß eingerichtet und verfügen über eine Vote.Question Eigenschaft:

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

Ich sammle hier Count () ist eigentlich das, was Sie wollen? Sum () würde das gleiche produzieren, aber es ist vielleicht nicht so meaningfull (?)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top