0

您好需要一些有关 LINQ 查询的帮助。我有一个名为 Shift 的实体。该实体有几个值字段,但我感兴趣的是ShiftID (int),ShiftDate (DateTime)GrossMount (decimal(10,2). 这需要按月分组(将其绑定到 ASP.NET 中的图表)。

我需要按月分组的过去 12 个月的数据。我在这篇文章中取得了一些进展:Linq to Entity,选择没有价值的组,但不是一路。这是我现在的代码:

      public IQueryable<Shift> GetPastMonths(int months, string accountNumber)
    {
        _context = new EtaxiEnteties();
        var _date = DateTime.Today;
        var _firstOfMonth = new DateTime(_date.Year, _date.Month, 31);
        var _twelveMonthAgoFirstOfMonth = _firstOfMonth.AddMonths(-12);

        // Generate a collection of the months and years for the last 12 months
        var _monthYears = Enumerable.Range(-12, 12).Select(monthOffset => { var monthDate = _firstOfMonth.AddMonths(monthOffset); return new { y = monthDate.Year, m = monthDate.Month }; });

        var _data = (from _monthYear in _monthYears
                    join _i in
                         (from _i in _context.Shifts.Where(acc => acc.Account.AccountNumber == accountNumber)
                         where _i.ShiftDate >= _twelveMonthAgoFirstOfMonth && _i.ShiftDate < _firstOfMonth
                         group _i by new { y = _i.ShiftDate.Year, m = _i.ShiftDate.Month } into g
                         select new { ShiftID = g.Key, GrossAmount = g.Count() }) on _monthYear equals _i.ShiftID into j
                    from _k in j.DefaultIfEmpty()
                    select new Shift() { ShiftDate = new DateTime(_monthYear.y, _monthYear.m, 1), GrossAmount = _k != null ? _k.GrossAmount : 0 });

        return _data as IQueryable<Shift>;

    }

现在我得到了一个按月分组的 Shift 对象集合作为回报,但仍然缺少 GrossAmount。虽然我从今天开始需要这个(仅从本月的 1 日开始)。相信这是我的主要问题:GrossAmount = g.Count(),但我不确定

那里有任何 LINQ 专家可以推动我吗?

4

1 回答 1

0

用于GrossAmount = g.Sum(x => x.GrossAmount)计算分组 Shift 实体的总 GrossAmount 值。我相信您在 GrossAmount (GrossMount) 属性名称中有错字。

于 2013-01-12T04:02:18.343 回答