如何使用linq对实体的所有月份明智记录求和?

时间:2013-09-10 05:41:35

标签: c# linq-to-entities

我的表就像这样 表:

id  no.of sales    datetime 
1    14            2013-09-10
2    45            2013-09-09
3    18            2013-09-08
4    14            2013-08-12
5    15            2013-08-14
6    18            2013-07-12

在上面的表中,第9个月有三行。第8个月有2个记录。我需要9个月和8个月的所有销售额的总和等等。 可以请告诉我如何实现这一目标。 我的查询:

DateTime frommonth = DateTime.Now.AddMonths(-3);
DateTime tomonth = DateTime.Now;
var result= from pa in cxt.Products
            where (pa.datevalue >= frommonth && pa.datevalue < tomonth)
                && pa.productname == productname
            orderby pa.datevalue descending
            select new { noofsales=pa.No_of_sales ,datetime=pa.datevalue};

通过使用上述查询,我​​得到了个人的第9个月记录。我不想要个人销售额,我需要所有9个月销售额,8个月销售额等等。请告诉我......

2 个答案:

答案 0 :(得分:3)

你可以使用SqlFunctions.DatePart静态方法,它将被翻译成DATEPART sql函数:

var results = from r in ctx.Products
              let year = SqlFunctions.DatePart("yy", r.datevalue)
              let month = SqlFunctions.DatePart("mm", r.datevalue)
              where (r.datevalue >= frommonth && r.datevalue < tomonth)
              group r by new { year, month } into g
              select new {
                  Year = g.Key.year,
                  Month = g.Key.month,
                  NoSales = g.Sum(x => x.No_of_sales)
              };

答案 1 :(得分:1)

var result = from r in cxt.Products
             group r by r.datevalue.Month
             into g
             select new {Month = g.Key, Sum = g.Sum(p=>p.No_of_sales)};