Как получить сумму в этом запросе Linq? - PullRequest
2 голосов
/ 24 марта 2009

У меня есть таблица, которая имеет ноль для многих детей. точно так же, как у этого сайта QUESTION, который может иметь от нуля до многих VOTES (либо Up == 1, либо Down == 0).

Мне нужно получить всех вопросов, которые набрали наибольшее количество голосов . Например. все вопросы, упорядоченные по убыванию суммы (голосов).

Я не уверен, как это сделать в linq.

Таким образом, у меня будет EntitySet с именем Вопросы и другой EntitySet с именем Votes.

Я пытался группировать и пускать, и упорядочивать, и ничего не компилируется: (

Может ли кто-нибудь иметь какие-либо предложения, пожалуйста?

Ответы [ 3 ]

3 голосов
/ 24 марта 2009
myDataContext.Questions
  .OrderByDescending(q => q.Votes.Select(v => v.VoteValue).Sum())

В понимании запроса (не проверено):

from q in myDataContext.Questions
order q by 
(
  from v in q.Votes
  select v.VoteValue
).Sum() descending
select q;
2 голосов
/ 24 марта 2009

Это в основном зависит от ваших данных, но вот небольшой пример:

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);
}
1 голос
/ 24 марта 2009

Поскольку вы используете EntitySet, я понял, что это Linq2SQL? Предполагая, что ссылки настроены правильно и есть свойство 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);

Я понял, что Count () на самом деле то, что вы хотите? Sum () выдаст то же самое, но, возможно, не имеет значения (?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...