2

正常に動作する次のクエリがあります。

var bands = new List<TimeBand>()
            {
                new TimeBand(){Region = 10,PeriodId = 5,StartDate = new DateTime(2013, 04, 01),EndDate = new DateTime(2014, 05, 31),DayName = "Friday",StartTime = "00:00",EndTime = "07:00"},
                new TimeBand(){Region = 10,PeriodId = 5,StartDate = new DateTime(2013, 04, 01),EndDate = new DateTime(2013, 05, 31),DayName = "Friday",StartTime = "07:00",EndTime = "00:00"},
                new TimeBand(){Region = 10,PeriodId = 4,StartDate = new DateTime(2013, 06, 01),EndDate = new DateTime(2013, 08, 31),DayName = "Saturday",StartTime = "20:00",EndTime = "00:00"}
            };

    var query = (from x in bands
                group x by new {x.Region, x.DayName}
                into grp
                    select new TimeBand()
                    {
                        Region = grp.Key.Region,
                        DayName = grp.Key.DayName,
                        StartDate = grp.Min(x => x.StartDate),
                        EndDate = grp.Max(x => x.EndDate)
                    }).ToList();

しかし、結果を Region と Dayname でグループ化すると、結果に他の列、つまり StartTime と EndTime が表示されません。

これが SQL クエリの場合、このグループ化された結果をサブクエリで使用し、他の列も取得します。

これを変更する方法はありますか? group by ステートメントに含まれていないプロパティも取得します。

ありがとう

4

4 に答える 4

1
var query = (from x in bands
                     group x by new { x.Region, x.DayName }
                         into grp
                         select new 
                         {
                             Region = grp.Key.Region,
                             DayName = grp.Key.DayName,
                             MinStartDate = grp.Min(x => x.StartDate),
                             AllStartDates = grp.Select(k => k.StartDate).ToList(),
                             EndDate = grp.Max(x => x.EndDate),
                             AllEndDates = grp.Select(k => k.EndDate).ToList(),
                         }).ToList();
于 2013-11-01T17:10:44.847 に答える