Wie kann ich die Summe in dieser Linq Abfrage erhalten?
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?
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 (?)