2011-11-30 9 views
0

私のデータベースSQLServerでは、私はKIDamountとの連想テーブルIDを持っています。私はすべてのIDの値を合計したいと思います。つまり、私はKID 6、KID 10などから金額を取得したいと考えています。合計Xデータベースからの値

私の問題は、1つのKIDに対して多くの値がある可能性があるため、これを行う方法はわかりません。約100 KIDsである。

私はC#でそのすべてのことをしたいです。最善の方法は何ですか?そして、どのような方法で保存するのですか?配列リスト?

EDIT:私は自分のアプリケーション内の値を必要とするので、SqlCommandオブジェクトをC#でそれを実行する必要があり

EDIT 2:私は、任意のエンティティオブジェクトを持つドントので可能isn't SQLへの

LINQ。 私はそれをSQLReaderなどでやりたいと思っています。それは可能ですか?

+0

SQLでこれを実行していたのなら、それはおそらく非常に簡単ですが、C#の回答が必要な場合にどのように手伝っていいのか分かりません。ソリューションはおそらくLINQで簡単に行うことができますが、ソリューションを投稿するのに十分なLINQについてはわかりません。 – FrustratedWithFormsDesigner

+0

C#でどのデータベース抽象化を使用していますか? LINQを使用できますか? – Kekoa

答えて

2

。最善の方法は何ですか?

最良の方法は非常に単純です。このSQLを使用するようにSQL Readerを使用して、この

SELECT 
     Kid, 
     SUM(AMOUNT) Sum_of_amount 
    FROM 
     table 
    GROUP BY 
     Kid 

のようなSQL式で使用することです。ここでは、読者の値を匿名型のリストに投影する例を示します。私にそれを匿名にしたくないのであれば、自分のタイプを定義して代わりに使うことができます。また、linq式の代わりにforループを使用することもできます。

using (SqlConnection cn = new SqlConnection ("ConnectionString")) 
     using (SqlCommand cmd = new SqlCommand (@" 
       SELECT 
        Kid, 
        SUM(AMOUNT) Sum_of_amount 
       FROM 
        table 
       GROUP BY 
        Kid", cn)) 

     { 
      cn.Open(); 
      using (SqlDataReader dr = cmd.ExecuteReader()) 
      { 
      var list = (from r in dr.Cast<DbDataRecord>() 
         select new {Id= r.GetInt32(0), SumOfAmount = r.GetInt32(1) }).ToList(); 
      } 

     } 

あなたはこの

Table<Kids> kids = db.GetKids(); 
var kidsSum = 
     (from k in kids 
     group p by p.Id into g 
     select new {ID = g.Key, SumOfAmount = g.Sum(p => p.Amount) }).ToList(); 

そして、何で保存最良の方法はあるようにそれを行うために、そのかなりまっすぐ進むのLINQ to SQLのようなものを使用している場合は?配列リスト?

「最良の」方法はありませんが、直接操作された配列には問題があります。あなたはあなたが選んだジェネリックコレクションで一層楽です。

多くの人が好きではないが、型指定されたデータセットも有効な選択肢です。

0
SELECT KID, SUM(amount) as 'Total' 
FROM Table 
GROUP BY KID 

これはC#では行いませんが、SQLでは3行のクエリです。

+0

Linqでこのようなクエリを書き直すのは簡単でしょうか? – FrustratedWithFormsDesigner

+0

答えをありがとう!私はアプリケーションで値が必要なので、C#でSQLCommandを使ってそのすべてを行う必要があります! – user896692

+1

@ user896692:なぜあなたは 'SQLCommand'オブジェクトを作成し、コマンドテキストを' 'SELECT KID、SUM(amount) '' Total 'from Table GROUP BY KID" 'に設定できませんか? http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtext.aspx – FrustratedWithFormsDesigner

0

それを行うために、SQL方法がある:私はC#でその全部をやりたい

Select ID, sum(amount) from table group by ID