2011-11-30 110 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