2016-12-26 4 views
1

У меня есть следующие значения в DataTableПолучить SUM из DataTable колонки

Affiliate Name | Call 
---------------|----- 
A    | 2 
B    | 1 
B    | 0 
A    | 3 

Как я могу получить Total графа Call против Affiliate Name 'A'. В приведенном выше примере, он должен вернуть 5.

foreach (DataRow row in dt.Rows) 
{ 
    string CallsOffered = //Get count 
} 
+0

вар groupedData = от б в dataTable.AsEnumerable() группы В по .Field ("Партнёрские Name") в г выбрать новый { Партнёрские Имя = g.Key, Count = g.Count(), вызов = g.Su m (x => x.Field («Звонок»)) }; –

+1

Возможный дубликат [Как рассчитать сумму столбца данных в asp.net?](http://stackoverflow.com/questions/5892993/how-to-calculate-the-sum-of-the-datatable-column -in-asp-net) – Daniel

+0

@ Daniel Его не просто SUM. Сумма 'Call' зависит от значения другого столбца –

ответ

3

Вы можете использовать DataTable.Compute методу

var sumOfA = dt.Compute("Sum(Call)", "[Affiliate Name] = 'A'"); 

Или использовать LINQ

var sumOfA = dt.AsEnumerable() 
       .Where(dr => dr.Field<string>("Affiliate Name").Equals("A")) 
       .Sum(dr => dr.Field<int>("Call")); 

В случае, если вы хотите получить сумму звонков для всех значений Affiliate Name использования LINQ с анонимного типа

var results = dt.AsEnumerable() 
       .GroupBy(dr => dr.Field<string>("Affiliate Name")) 
       .Select((group, dr) => new 
       { 
        AffiliateName = group.Key, 
        CallsCount = group.Sum(dr.Field<int>("Call"))) 
       }); 

foreach(var result in results) 
{ 
    // Use results 
    Console.WriteLine($"{result.AffiliateName}: {result.CallsCount}"); 
} 
+0

I предпочитает LINQ. Спасибо :) –

+1

'.... Sum (dr => dr.Field (« Call »)). ToString()' должен работать – Fabio

+0

, не так уж важно, но вы забыли цитату в конце Console.WriteLine – barakcaf

0

Вы можете использовать

int CallsOffered=0; 
    foreach (DataRow row in dt.Rows) 
    { 
     if(row["Affiliate_Name"].ToString()=="A") 
     CallsOffered += int.Parse(row["Call"].ToString()); 
    } 
0

Просто используйте

object sumObject = table.Compute("Sum(Call)", "Affiliate_Name = 'A'"); 
0
// with this code you can use linq features in all other steps 
// add each column you need them to use them with linq 
var records = dt.AsEnumerable().Select(row => 
new 
{ 
    Affiliate = row.Field<string>("Affiliate(col name)"), 
    Call = Convert.ToInt32(row.Field<int>("Call(col name)")) 
}); 
int count = records.Where(q => q.Affiliate == "A").Sum(q => q.Call); 
Смежные вопросы