0

こんにちはLINQクエリについてサポートが必要です。Shiftというエンティティがあります。このエンティティにはいくつかの値フィールドがありますが、私が興味を持っているのは、、ShiftID (int)です。そして、これを月ごとにグループ化する必要があります(これをASP.NETのグラフにバインドします)。ShiftDate (DateTime)GrossMount (decimal(10,2)

月ごとにグループ化された過去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スペシャリストはいますか?

4

1 に答える 1

0

GrossAmount = g.Sum(x => x.GrossAmount)グループ化されたShiftエンティティの合計GrossAmount値を計算するために使用します。GrossAmount(GrossMount)プロパティ名にタイプミスがあると思います。

于 2013-01-12T04:02:18.343 に答える