0

I have the following linq query which gives me values per day, however I've had to hardcode it as I can't work out how to change it into a loop:

var result = from c in groupedJobs

    select new
    {
        Name = c,
        Data = new int[] {
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[0]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[1]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[2]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[3]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[4]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[5]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[6]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[7]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[8]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[9]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[10]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[11]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[12]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[13]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[14]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[15]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[16]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[17]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[18]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[19]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[20]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[21]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[22]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[23]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[24]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[25]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[26]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[27]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[28]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[29]),
        groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[30]),

    }
    };

I'm trying to do something like this but the syntax is wrong:

select new ClaimProviderCountAggregate
{
    Name = c,
    Data = new int[] {
        foreach (var item in daysInMonth)
        {
            groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==item
        }

More info:

Days is an array for the number of days in the current month

 var daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
 var days = Enumerable.Range(1, daysInMonth).ToArray();

This is my definition for groupedjobs

var groupedJobs = new List<ClaimProviderCount>();
public class ClaimProviderCount
{
    public DateTime Date { get; set; }
    public string ClaimProvider { get; set; }
}
1
  • 1
    A question now that you've put in more details. Are you sure this is what you want? In your anonymous object c (and hence Name) is not going to be a string, yet you are comparing it with one. I think what you want is Name = c.ClaimProvider. Is that right? Commented Aug 7, 2018 at 4:11

2 Answers 2

3

You can try this, considering your days is an enumerable:

from c in groupedJobs
select new
{
    Name = c,
    Data = days.Select(day => groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==day))
               .ToArray()
}
Sign up to request clarification or add additional context in comments.

Comments

0

You can create the object first:

var a=select new ClaimProviderCountAggregate
{
    Name = c,
    Data = new int[30]
}

Then populate the array with loop:

for(int i=0;i<31;i++)
        {
            a.Data[i++]=groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==days[i])
        }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.