Group by on datatable by using linq query

Prashant Khadatkar

Following are rows in my datatable:

TemplateName    Task                        Days
PT_Case     Assign Acceptance Task          83
PT_Case     Assign Acceptance Task          64
PT_Case     Assign Metadata Task            65
PT_Case     Assign Metadata Task            93  
PT_Type     Complete Metadata Task          67
PT_Type     Complete Metadata Task          -3
PT_Type     Assign Acceptance Task          67
PT_Type     Assign Acceptance Task          61

I need following output by linq query:

TemplateName         Task              Days  TotalDays
PT_Case    Assign Acceptance Task      73    152
PT_Case      Assign Metadata Task      79    152
PT_Type    Complete Metadata Task      32    96
PT_Type    Assign Acceptance Task      64    96

Note: "Days" calculated as average of task days. Please suggest, how to achieve it. Thanks in advance.

Sergey Berezovskiy
var query = from r in dt.AsEnumerable()
            group r by r.Field<string>("TemplateName") into templates
            let totalDays = templates.Sum(r => r.Field<int>("Days"))
            from t in templates
            group t by new
            {
                TemplateName = templates.Key,
                Task = t.Field<string>("Task"),
                TotalDays = totalDays
            } into tasks
            select new
            {
                tasks.Key.TemplateName,
                tasks.Key.Task,
                Days = tasks.Sum(r => r.Field<int>("Days")),
                tasks.Key.TotalDays
            };

It groups rows by template name and calculates total days for template. Then it groups template rows by task, and calculates days for tasks. Thats how I understand what you want to do. But result differs from your expected result (I don't understand how you get those values):

 TemplateName         Task              Days  TotalDays
    PT_Case    Assign Acceptance Task   147   305
    PT_Case      Assign Metadata Task   158   305
    PT_Type    Complete Metadata Task    64   192
    PT_Type    Assign Acceptance Task   128   192

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

How to group DataTable results using Linq query expression

From Dev

LIKE query on DataTable using LINQ

From Dev

Using linq to group, select, and order a datatable

From Dev

Linq query using group by and having

From Dev

LINQ query using Group By and Let

From Dev

LINQ to DataTable Join Query using OR condition

From Dev

LINQ group by query using reflected property name

From Dev

Convert Sql Query To linq using sum with group by

From Dev

LINQ query in C# using group and join

From Dev

LINQ query in C# using group and join

From Dev

Using LINQ Query DataTable using partial column names

From Java

LINQ query on a DataTable

From Dev

Linq grouping query to DataTable

From Dev

Converting Datatable to sublist using linq - retrieve rows without group by key

From Dev

Group by and sum query on datatable

From Dev

How to Group By on Columns in datatable in Linq

From Dev

Linq Query on DataTable and Update Records

From Dev

convert group by query to linq

From Dev

Linq query having group by

From Dev

Linq Query With Entities and Group By

From Dev

convert group by query to linq

From Dev

Complex Group By linq Query

From Dev

LINQ does not produce COUNT() query on group using EF Core

From Dev

How to group by on multiple columns from datatable with linq?

From Dev

How to group by on multiple columns from datatable with linq?

From Dev

Search datatable using Linq to dataset

From Dev

Using Linq to GroupBy and Sum datatable

From Dev

Using LINQ and Storing Results in a DataTable

From Dev

LINQ To Datatable using "Any" with a List