繁体   English   中英

Linq to Entity,选择具有或不具有值的组

[英]Linq to Entity, selecting group with or without value

您好需要有关LINQ查询的帮助。 我有一个叫做Shift的实体。 这个实体有几个值字段,但是我最喜欢的是ShiftID (int)ShiftDate (DateTime)GrossMount (decimal(10,2) 。这需要按月分组(将其绑定到ASP中的图形)。净)。

我需要按月分组的过去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。 Althoug我将需要从今天开始的日期(仅从当前月份的1开始)。 相信这是我的主要问题:GrossAmount = g.Count(),但我不确定

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM