2017-01-24 5 views
0

У меня есть следующие в DataTable:LINQ и DataTable запрос

58,10,251,3 
58,10,251,1 
58,10,251,1 
58,10,251,2 
58,10,261,1 
60,11,666111,1 

Я хотел бы получить следующие результаты:

251,7 
261,1 

666111,1 

Это то, что я играю с до сих пор я думаю, Я почти есть, но не совсем уверен, как закончить его ....

var query = from row in dt.AsEnumerable().Where(h => h.Field<string>("COLUMN 0") == val) 
      group row by row.Field<string>("COLUMN 2") 
      into sales 
      orderby sales.Key 
      select new 
      { 
       Name = sales.Key, 
       CountOfClients = sales.Sum(v => sales.Count()) 
      }; 

Это дает мне

251,16
261,1
666111,1

Так он работает на 261 и 666111, но не 251.

Как-то 8 получил в два раза.

ответ

0
sales.Sum(v => sales.Count()) 

Это неправильно. Вы суммируете количество продаж. Это то же самое, что и sales.Count() * sales.Count().

Вы должны написать что-то вроде sales.Sum(v => v.Field<int>("COLUMN 4")) или что-то подобное, исходя из ваших предыдущих запросов.

То есть:

var query = from row in dt.AsEnumerable().Where(h => h.Field<string>("COLUMN 0") == val) 
     group row by row.Field<string>("COLUMN 2") 
     into sales 
     orderby sales.Key 
     select new 
     { 
      Name = sales.Key, 
      CountOfClients = sales.Sum(v => v.Field<int>("COLUMN 4")) 
     }; 

Если ваши столбцы фактически строки, вы должны были бы написать:

int.Parse(v.Field<string>("COLUMN 4")) 
+1

Это работало ... спасибо за тонну ... Я не мог понять, это из. Благодаря! Я отвечу на ваш ответ через 7 минут из-за ограничения времени. – chancelance

Смежные вопросы