Как мне получить сумму в этом запросе Linq?

StackOverflow https://stackoverflow.com/questions/676290

  •  21-08-2019
  •  | 
  •  

Вопрос

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

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

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

Итак, у меня будет EntitySet под названием «Вопросы» и еще один EntitySet под названием «Голосование».

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

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

Это было полезно?

Решение

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;

Другие советы

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

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

Поскольку вы используете 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() выдаст то же самое, но, возможно, это не так значимо (?)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top