Hi All,

I feel that what I am doing with my code here is really bad practice, or at least it feels that way.

I am working on a project which will be calculating peoples salary on a weekly basis, based on hours worked they will be paid overtime etc...

I am performing a join/group by then summing multiple colummns together. However, I am performing calculations inside of the group by, which feels wrong to me. I am wanting to know if theres a way of adding the summed columns together in a different manner to how I am performing it?

There are 4 different types of overtime payment in the month detailed below, which are Basic, Voluntary, extended and Other

HoursOnBankHolidayW3 = pg.Sum(x => x.ShiftDate >= vStart3 && x.ShiftDate <= weekThree ? x.Basic : 0)
                                 + pg.Sum(x => x.ShiftDate >= vStart3 && x.ShiftDate <= weekThree ? x.Voluntary : 0)
                                 + pg.Sum(x => x.ShiftDate >= vStart3 && x.ShiftDate <= weekThree ? x.Other : 0)
                                 + pg.Sum(x => x.ShiftDate >= vStart3 && x.ShiftDate <= weekThree ? x.ExtendedHours : 0) > 2250
                                 ? pg.Sum(x => x.ShiftDate == weekThree ? x.Voluntary : 0)
                                 + pg.Sum(x => x.ShiftDate == weekThree ? x.ExtendedHours : 0)
                                 + pg.Sum(x => x.ShiftDate == weekThree ? x.Other : 0)
                                 + pg.Sum(x => x.ShiftDate == weekThree ? x.Basic : 0) : 0,

So, the code above is being performed inside a group by query, I am checking if the summed hours in week 3 are greater than 2250 minutes (37.5) hours and if so, Sum the following values. This seems really cumbersome. and im wondering if theres a neater way to sum multiple columns and perform a calculation other than the above.

Hi @JROW ,

I am performing a join/group by then summing multiple colummns together. However, I am performing calculations inside of the group by, which feels wrong to me. I am wanting to know if theres a way of adding the summed columns together in a different manner to how I am performing it?

Without the table structure, it's hard to determine if there is a better way to achieve the same result. So, it is better to share the table structure or create a simple sample with the test data, so that we can easier to reproduce the problem and help you find a better way.

  HoursOnBankHolidayW3 = pg.Sum(x => x.ShiftDate >= vStart3 && x.ShiftDate <= weekThree ? x.Basic : 0)    
                              + pg.Sum(x => x.ShiftDate >= vStart3 && x.ShiftDate <= weekThree ? x.Voluntary : 0)  
                              + pg.Sum(x => x.ShiftDate >= vStart3 && x.ShiftDate <= weekThree ? x.Other : 0)  
                              + pg.Sum(x => x.ShiftDate >= vStart3 && x.ShiftDate <= weekThree ? x.ExtendedHours : 0) > 2250  
                              ? pg.Sum(x => x.ShiftDate == weekThree ? x.Voluntary : 0)  
                              + pg.Sum(x => x.ShiftDate == weekThree ? x.ExtendedHours : 0)  
                              + pg.Sum(x => x.ShiftDate == weekThree ? x.Other : 0)  
                              + pg.Sum(x => x.ShiftDate == weekThree ? x.Basic : 0) : 0,  

To the above code, you could try to use a where clause to filter the data, then use the Sum method to calculate the data. Code like this:

        var pglist = new List<pgTest>()  
            new pgTest(){ Id=1, ShiftDate= new DateTime(2022,5,16,0,0,0), Basic = 12, ExtendedHours= 12, Other=11, Voluntary=21},  
             new pgTest(){ Id=1, ShiftDate= new DateTime(2022,5,17,0,0,0), Basic = 12, ExtendedHours= 12, Other=11, Voluntary=21},  
              new pgTest(){ Id=1, ShiftDate= new DateTime(2022,5,18,0,0,0),  ExtendedHours= 12, Other=11, Voluntary=21},  
               new pgTest(){ Id=1, ShiftDate= new DateTime(2022,5,19,0,0,0), Basic = 12, ExtendedHours= 12, Other=11, Voluntary=21},  
                new pgTest(){ Id=1, ShiftDate= new DateTime(2022,5,20,0,0,0),  ExtendedHours= 12, Other=11, Voluntary=21}  
        var vStart3 = new DateTime(2022,5,16,0,0,0);  
        var weekThree = new DateTime(2022, 5, 20, 0, 0, 0);  
        var query2 = pglist.GroupBy(c => c.Id).Select(c =>  
            // use a where clause filter the data first.  
            var pg = c.Where(x => x.ShiftDate >= vStart3 && x.ShiftDate <= weekThree).ToList();  
            return new  
                ShiftDate = c.Key,  
                HoursOnBankHolidayW4 = pg.Sum(x => x?.Basic)  
             + pg.Sum(x => x?.Voluntary)  
             + pg.Sum(x => x?.Other)  
             + pg.Sum(x => x?.ExtendedHours) > 20  
             ? (pg.Sum(x => x.ShiftDate == weekThree ? x.Voluntary : 0)  
             + pg.Sum(x => x.ShiftDate == weekThree ? x.ExtendedHours : 0)  
             + pg.Sum(x => x.ShiftDate == weekThree ? x.Other : 0)  
             + pg.Sum(x => x.ShiftDate == weekThree ? x.Basic : 0)) : 0  

If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

Best regards,
Dillion