2009-03-24 14 views
2

私は、0から多くの子を持つテーブルを持っています。このサイトの内容がQUESTIONのように0から多くのVOTES(Up == 1またはDown == 0のいずれか)を持つことができます。このLinqクエリでSumを取得するにはどうすればよいですか?

のうち、最も多くの票を持っているすべての質問を取得する必要があります。例えば。すべての質問は、Sum(Vote)降順で並べられています。

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

私は質問と呼ばれるEntitySetとVotesと呼ばれる別のEntitySetを持っています。

私がして、グループを行うとletとすることにより、何も順序がコンパイル:(

は、誰もが何か提案を持ってもらえてください、主に自分のデータに依存していること

答えて

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; 
+0

素敵で痩せています。また、(myDataContext.Questionsのqから)...形式も使用してこれを編集できますか? (私はそれを減らす方法を学ぶことができるので、あなたの軽いlinqの構文にしてください?) –

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

素敵な冗長な答え - uは、テストデータのXMLを使用する方法が大好き(?) 。 :)歓声! –

1

あなたは私はあなたが適切に設定参照を持っているとVote.Questionプロパティを持っていると仮定すると、それはLinq2SQLで集まるのEntitySetを使用しているので:?

(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()は実際にあなたが望むものですか?合計は()と同じを生産、おそらくとして意味のあるではないでしょうクエリの理解で

関連する問題