从foreach循环创建数组的正确语法

时间:2018-08-07 03:42:45

标签: c# linq

我有以下linq查询,它每天为我提供值,但是我不得不对其进行硬编码,因为我不知道如何将其更改为循环:

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]),

    }
    };

我正在尝试执行类似的操作,但是语法错误:

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

更多信息:

天数是当月天数的数组

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

这是我对分组工作的定义

var groupedJobs = new List<ClaimProviderCount>();
public class ClaimProviderCount
{
    public DateTime Date { get; set; }
    public string ClaimProvider { get; set; }
}

2 个答案:

答案 0 :(得分:3)

考虑到您的days可以枚举,您可以尝试一下:

from c in groupedJobs
select new
{
    Name = c,
    Data = days.Select(day => groupedJobs.Count(d => d.ClaimProvider == c && d.Date.Day==day))
               .ToArray()
}

答案 1 :(得分:0)

您可以先创建对象:

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

然后用循环填充数组:

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