Question

J'ai une table qui a beaucoup d'enfants de zéro. tout comme la façon dont ce site a un qui peut avoir QUESTION zéro à plusieurs VOTES (vers le haut == 1 == 0 ou vers le bas).

Je dois obtenir toutes les questions qui ont le plus des votes . Par exemple. toutes les questions, classés par ordre Somme (Vote) descendant.

Je ne sais pas comment le faire dans LINQ.

Alors j'aurais un EntitySet appelé Questions et un autre EntitySet appelé Votes.

Je suis en train de faire un groupe et laisser l'ordre et rien ne compile: (

Quelqu'un pourrait-il des suggestions, s'il vous plaît?

Était-ce utile?

La solution

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

Dans la compréhension de la requête (non cochée):

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

Autres conseils

Cela dépend surtout de vos données, mais voici un petit échantillon:

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

Puisque vous utilisez EntitySet je crois qu'il est Linq2SQL? En supposant que vous avez des références établies correctement et ont une propriété 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);

Je crois ici COUNT () est en fait ce que vous voulez? Somme () produirait le même, mais il est peut-être pas aussi meaningfull (?)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top