Pregunta

Tengo una tabla que tiene cero a muchos niños. al igual que cómo este sitio tiene un QUESTION que puede tener de cero a muchos VOTES (ya sea hacia arriba o hacia abajo == 1 == 0).

Necesito conseguir todas las preguntas que tienen el mayor número de votos positivos . P.ej. todas las preguntas, ordenadas por Sum (Voto) descendente.

No estoy seguro de cómo hacerlo en LINQ.

Así que me gustaría tener una llama EntitySet Preguntas y otro EntitySet llamada Votos.

Yo estaba tratando de hacer grupo y dejar que el orden y nada compila: (

Podría alguien tiene alguna sugerencia, por favor?

¿Fue útil?

Solución

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

En la comprensión de consulta (sin marcar):

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

Otros consejos

Esto depende principalmente de sus datos, pero aquí es una pequeña muestra:

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

Desde que está utilizando EntitySet Deduzco que es Linq2SQL? Asumiendo que tiene referencias establecidas correctamente y tener una propiedad 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);

Tengo entendido aquí count () es en realidad lo que quiere? Sum () produciría el mismo, pero es quizás no tan meaningfull (?)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top