Domanda

Ho una tabella che ha zero a molti bambini. proprio come come questo sito ha una QUESTION che può avere da zero a molti VOTES (verso l'alto == 1 o Giù == 0).

Ho bisogno di tutte le domande che hanno i voti più aggiornate . Per esempio. tutte le domande, in ordine di Somma (votazione) discendente.

Non sono sicuro di come farlo in LINQ.

Quindi, vorrei avere un EntitySet chiamato Domande e un altro chiamato EntitySet Voti.

Stavo cercando di fare gruppo e lasciare che l'ordine e nulla compila: (

Si poteva avere qualche suggerimento, per favore?

È stato utile?

Soluzione

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

In interrogazione comprensione (incontrollato):

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

Altri suggerimenti

Questo dipende in gran parte sui dati, ma ecco un piccolo esempio:

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

Dal momento che si sta utilizzando EntitySet ho capito che è Linq2SQL? Supponendo di avere riferimenti impostare correttamente e avere una proprietà 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);

ho capito qui count () è in realtà ciò che si vuole? Sum () produrrebbe lo stesso, ma è forse non così meaningfull (?)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top