2011-11-30 116 views
0

在我的數據庫SQLServer中,我有一個關聯表IDKIDamount。我想總結每個ID的值。這意味着我想要從KID 6,KID 10等金額。來自數據庫的總和X值

我的問題是,我不知道如何做到這一點,因爲可以有一個KID值很多,並且可以大概有100個KID。

我想在C#中做到這一點。什麼是最好的方法?什麼是最好的保存方式?數組列表?

編輯:

我需要一個SqlCommand做到這一點在C#,因爲我需要在我的應用程序中的值!

編輯2:

的LINQ to SQL isn't可能的,因爲我不具有任何實體對象。 我想用SQLReader或類似的東西來做。那可能嗎?

+0

如果你在SQL中這樣做,它可能會很容易,但我不確定如果你想要一個C#答案如何幫助你。該解決方案可能很容易在LINQ中完成,但我不知道LINQ發佈足夠的解決方案...... – FrustratedWithFormsDesigner

+0

您在C#中使用的是什麼數據庫抽象?你可以使用LINQ嗎? – Kekoa

回答

2

我想這樣做,整個事情在C#。什麼是最好的方法?

最好的辦法是在SQL表達式中使用這樣

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

使用SQL讀者使用這個SQL是相當直截了當。下面是一個例子,我將讀者的值投影到一個由匿名類型組成的列表中。如果你不想讓我匿名,你可以定義你自己的類型並使用它。您也可以使用for循環代替linq表達式。

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

     } 

如果你正在使用類似的LINQ to SQL它非常直截了當地做這樣

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

什麼是保存最好的方式?數組列表?

沒有「最好」的方式,但直接操縱數組有問題。你最好用你選擇的通用集合。

鍵入數據集也是一個有效的選擇,儘管許多人不喜歡它們。

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 SELECT KID,SUM(amount)as'Total'FROM TABLE GROUP BY KID「'? http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtext.aspx – FrustratedWithFormsDesigner

0

的SQL的方式來做到這一點是:

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