2010-10-17 57 views
3

有一个SQL数据库中的表像下面:与LINQ的SQL表行的总和?

SampleTable:

----------------------- 
id | number | price 
----------------------- 
1 | 3 | 300 
2 | 1 | 200 
3 | 5 | 100 
4 | 10 | 10 
5 | 30 | 30 
6 | 1 | 500 
----------------------- 

我要计算总价象下面这样:

in each row => var SumOfEachRow = number * price; 
Total Price = sum of SumOfEachRow; 

因此Total Price将是3100

现在,我想用LINQ来计算它。 例如:

int TotalPrice = from q in SampleTable 
       select new 
       { 
        TotalPrice = q.number * q.price 
       }.Sum(); 

上面的代码返回错误的结果!!! 你能指导我吗?谢谢。

回答

4

尝试:

decimal TotalPrice = SampleTable.Sum(q => q.number * q.price); 
+0

我以前测试过它,它返回一个例外'算术溢出错误将表达式转换为数据类型int.' – 2010-10-17 13:38:42

+0

这是因为你已售出大量的项目;)尝试将'TotalPrice'声明为'double'或'decimal'。相应地更新答案。 – 2010-10-17 13:43:04

+0

我测试了'double',但我又收到异常。我用foreach完成了它.'var query = SampleTable.Select(q => q); foreach(查询中的var item)TotalPrice + = item.number * item.price'它不会返回异常!!! – 2010-10-17 14:38:41

1

试试这个

var TotalPrice = from q in SampleTable.AsEnumerable() 
         let y = Convert.ToInt32(q["number"]) * Convert.ToInt32(q["price"]) 
         select y; 

     int totalPrice = TotalPrice.Sum(); 
+0

那么,它和以前的答案一样!!! !!!另一方面有什么区别!!! SampleTable是默认可枚举的。 – 2010-10-18 06:10:07

+0

你有没有试过? ?? becoz这对我有用 – TalentTuner 2010-10-18 06:21:02