2

私はゼロから多くの子供を持つテーブルを持っています。QUESTIONこのサイトが 0 から多数VOTES(Up == 1 または Down == 0)を持つことができるのと同じように。

賛成票が最も多いすべての質問を取得する必要があります。例えば。Sum(Vote) の降順で並べられたすべての質問。

linqでそれを行う方法がわかりません。

したがって、質問と呼ばれるエンティティセットと、投票と呼ばれる別のエンティティセットがあります。

group by と let と order by を実行しようとしましたが、何もコンパイルされません:(

誰か提案をお願いできますか?

4

3 に答える 3

3
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;
于 2009-03-24T14:50:57.947 に答える
2

それは主にデータに依存しますが、ここに小さなサンプルがあります:

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);
}
于 2009-03-24T07:22:53.157 に答える
1

あなたはEntitySetを使用しているので、Linq2SQLですか?参照が適切に設定されており、Vote.Quest プロパティがあると仮定します。

(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() は同じものを生成しますが、おそらくそれほど意味がありません(?)

于 2009-03-24T14:47:04.820 に答える