Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#GroupBy两把钥匙面临麻烦_C#_Asp.net Mvc_Group By - Fatal编程技术网

C#GroupBy两把钥匙面临麻烦

C#GroupBy两把钥匙面临麻烦,c#,asp.net-mvc,group-by,C#,Asp.net Mvc,Group By,在我的控制器中,我想按两列对数据库表记录进行分组 以下是我迄今为止的代码: List<tblFAM> tblFAMs = db.tblFAMS.Where(x => x.CDate.Year == year && x.Ftype == 1).ToList(); vmMonthlyReport.FByCounty = tblFAMs.GroupBy(x => new { x.code_County.County, x.CDate.Month}) .

在我的控制器中,我想按两列对数据库表记录进行分组

以下是我迄今为止的代码:

List<tblFAM> tblFAMs = db.tblFAMS.Where(x => x.CDate.Year == year && x.Ftype == 1).ToList();

vmMonthlyReport.FByCounty = tblFAMs.GroupBy(x => new { x.code_County.County, x.CDate.Month})
    .Select(t => new FByCountyProxy()
    {
        CountyName = t.Key.County,
        MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(t.Key.Month),
        CountyCount = t.Count()
    }).ToList();
我想要的是在顶部只显示一次月份名称(没有重复,因为您可以看到的是从图片中看到的情况)。。。那么在表体中只有3行。。每个县一个。。然后在相应月份的每个
td
元素中进行计数

如果按这两列进行分组,我不知道为什么月份和县会重复?此外,如果特定县的
计数为
0
。。我希望它也能显示出来,而不是一片空白

更新

C#-控制器

List<tblFAM> tblFAMs = db.tblFAMS.Where(x => x.CDate.Year == year && x.Ftype == 1).ToList();

            vmMonthlyReport.FByCounty = tblFAMs.GroupBy(x => x.code_County.County).ToList();
List tblFAMs=db.tblFAMs.Where(x=>x.CDate.Year==Year&&x.Ftype==1.ToList();
vmMonthlyReport.FByCounty=tblFAMs.GroupBy(x=>x.code_County.County).ToList();
C#Class

public class vmMonthlyReport
{
    public vmMonthlyReport()
    {
        FByCounty = new List<IGrouping<string, tblFAM>>();();
    }
    public List<IGrouping<string, tblFAM>> FByCounty { get; set; }
}
公共类vmMonthlyReport
{
公共vmMonthlyReport()
{
FByCounty=新列表();();
}
公共列表FByCounty{get;set;}
}
查看

<table class="table table-bordered table-hover table-responsive">
    <thead>
        <tr>
            <th></th>
            @for (var i = 1; i <= 12; i++)
            {
                <th>
                    @CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(i)
                </th>
            }
            <th>Total</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.FByCounty)
        {
            <tr>
                <td>@item.Key</td>
                @for (var i = 1; i <= 12; i++)
                {
                    <td>
                        @item.Count(x => x.CDate.Month == i)
                    </td>
                }
                @*<td>
                    @Model.FByCounty.Count(x => x.Key == item.Key)
                </td>*@
            </tr>
        }
    </tbody>
</table>

@对于(变量i=1;i x.Key==item.Key)
*@
}

首先要创建月份名称,只需执行以下操作

@foreach (int i = 1; i <= 12; i++)
{
    <th>
        @CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(i)
    </th>
}

@foreach(inti=1;i首先创建月份名称,只需执行以下操作

@foreach (int i = 1; i <= 12; i++)
{
    <th>
        @CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(i)
    </th>
}

@foreach(int i=1;我认为这个答案更好,删除了我的。我现在正在视图中分组,是否需要编辑我的控制器代码?@Grizzly您肯定可以将您使用的模型更改为更好的模式。可以先在县上分组,然后在选择中在月上分组。或者只让您的模型具有每个月的计数例如
JanuaryCount=t.Where(x=>x.Month==1.Count()
。好的,我已经开始工作了。还有一件事..如果我想在表的末尾增加一个名为“Total”的列,我需要做什么才能将每行中的所有数字相加,并将总和显示为最后一列中的总和?@Grizzly根据您现在拥有的内容,您需要
@item.Count()
总计。这个答案更好,删除了我的。我现在正在视图中分组,是否需要编辑我的控制器代码?@Grizzly您肯定可以将您使用的模型更改为更好的模式。可以先在县上分组,然后在“选择”中对月份进行分组。或者只让您的模型具有计数每个月,比如
JanuaryCount=t.Where(x=>x.month==1.Count()
。好的,我让它工作了。还有一件事。如果我想在表的末尾增加一个名为“Total”的列,我需要做什么才能将每行中的所有数字相加,并将总和显示为最后一列中的总和?@Grizzly根据您现在拥有的内容,您需要
@item.Count()
@foreach (int i = 1; i <= 12; i++)
{
    <th>
        @CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(i)
    </th>
}
<tbody>
@foreach (var item in Model.FByCounty.GroupBy(x => x.CountyName))
{
    <tr>
        <td>@item.Key</td>
        @for(int i = 1; i <= 12; i++)
        {
            <td>@item.Where(x => x.MonthName == CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(i))
                 .Select(x => x.CountyCount)
                 .SingleOrDefault()</td>
        }
    </tr>
}
</tbody>