Получить max + min в одной строке с помощью linq

Как я могу изменить этот метод, чтобы он также возвращал Max(t.StartTime) и Min(t.StartTime), используя его только в одной строке, как показано ниже?

 public IQueryable<Timetable> GetTimetables()
    {
        return from t in _entities.Timetables
               select t;
    }

/M


person Lasse Edsvik    schedule 10.11.2009    source источник


Ответы (2)


Сверху моей головы (читай: непроверенный) и предполагая, что StartTime не обнуляется:

public class TimetableWithMaxMin
{
    public Timetable Timetable { get; set; }
    public DateTime Max { get; set; }
    public DateTime Min { get; set; }
}

public IQueryable<TimetableWithMaxMin> GetTimetables()
{
    return from t in _entities.Timetables
           select new TimetableWithMaxMin
           {
               Timetable = t,
               Max = _entities.Timetables.Max(t => t.StartTime),
               Min = _entities.Timetables.Min(t => t.StartTime)
           };
}

Это становится значительно сложнее, когда StartTime может принимать значение NULL.

person Craig Stuntz    schedule 10.11.2009

Я не знаю, применимо ли это к инфраструктуре Entity, но с linq это что-то вроде этого

 public IQueryable<Timetable> GetTimetables()
    {
        return from t in _entities.Timetables
               select new {maxt = Max(t.StartTime), mint = Min(t.StartTime)};
    }
person Omu    schedule 10.11.2009
comment
похоже, есть некоторые проблемы с синтаксисом - person Lasse Edsvik; 10.11.2009
comment
Он забыл t =>, как в t => t.StartTime. См. msdn.microsoft.com/en-us/vcsharp/aa336747.aspx. #maxSimple - person Craig Stuntz; 10.11.2009
comment
t = › используется для лямбда-выражений, что-то вроде этого GetTimeTables().Select(t =› new {maxt = Max(t.StartTime), mint = Min(t.StartTime)}) - person Omu; 10.11.2009
comment
Для Max и Min требуется выражение. Смотрите ссылку, которую я разместил, Ому. - person Craig Stuntz; 10.11.2009