C# 用LINQ生成矩阵表的困难

C# 用LINQ生成矩阵表的困难,c#,sql,asp.net-mvc,linq,linq-to-sql,C#,Sql,Asp.net Mvc,Linq,Linq To Sql,我正在尝试使用以下模型使用LINQ查询矩阵表: public class Order { public int Id { get; set; } public DateTime DateCreated { get; set; } public DateTime? DateModified { get; set; } public virtual ICollection<OrderLine> OrderLines { get; set; } } pub

我正在尝试使用以下模型使用LINQ查询矩阵表:

public class Order
{
    public int Id { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime? DateModified { get; set; }
    public virtual ICollection<OrderLine> OrderLines { get; set; }
}

public class OrderLine
{
    public int Id { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public int OrderId { get; set; }
    public int ProductId { get; set; }
    public virtual Order Order { get; set; }
    public virtual Product Product { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public string Sku { get; set; }
    public decimal UnitPrice { get; set; }
    public virtual ICollection<OrderLine> OrderLines { get; set; }
}
这“有点”有效,但我需要解决一些问题

三月份我有10种产品。 四月份,我又创建了两个。 8月份又有3个

因此,对于1月至3月,我希望看到我在4月和8月创建的产品,销售数量为0。目前,这些产品被排除在数据收集之外

这使得在我看来很难重复。我希望收集的数据反映所有产品,如果它们在2月份不存在,则只显示0

我用于查询的ViewModels:

public class ReportingMatrix
{
    public int Month { get; set; }
    public List<ReportingMatrixData> MatrixData { get; set; }
}

public class ReportingMatrixData
{
    public string ProductName { get; set; }
    public int Cases { get; set; }
}
公共类报告矩阵
{
公共整数月{get;set;}
公共列表矩阵扩展数据{get;set;}
}
公共类ReportingMatrixData
{
公共字符串ProductName{get;set;}
公共int Cases{get;set;}
}
问题
  • 我需要对我的查询进行哪些更改才能执行我希望它执行的操作 是吗
  • 如何循环数据以在HTML中创建表
  • 我现在使用int表示这个月,但我真的希望得到 字符串表示法。我没能做到这一点

  • 我不认为最好的方法是尝试将其仅放在一个Linq查询中

    只需创建单独的查询来选择不同的月份和产品,然后创建一个linq查询,对给定产品和月份的订单求和。允许0作为默认结果值

    这也将更容易解决2。三,。 其他提示,要获取所有月份名称,请执行以下操作:

    someDateTime.Month.ToString("MMMM")
    
    或者使用以下文件中的第一个代码段:

    其他建议:研究其他连接类型,如完全连接、外部连接

    someDateTime.Month.ToString("MMMM")