Помогиет с LINQ запросом
От: PlotNick.lj Узбекистан plotnick.livejournal.com
Дата: 06.07.09 16:52
Оценка:
Помогите пожалуйста не могу составить правильный Linq запрос.

имееться к примеру такая колекция расписаний.
Class Shedule{
  DateTime StartAt;
  DateTime EndAt;
  String ActualOnDays;
}


List<Shedule> Schedules = List<Shedule>();
Schedules.Add(
  { 
   StartAt = "01/01/0001 9:30:00 AM",
   EndAt   = "01/01/0001 7:30:00 PM",
   ActualOnDays = "MonTueWed"
  }
 );


Нужен запрос, который проверит есть ли в списке расписание в диапазон которого входит DateTime.Now То есть попросту говоря нужно проверить, актуален ли список расписаний прямо сейчас.
Обратите внимание, что используеться буржуйский формат. То есть надо учитывать AM-PM.
Re: Помогиет с LINQ запросом
От: PlotNick.lj Узбекистан plotnick.livejournal.com
Дата: 06.07.09 16:59
Оценка:
Ничего в голову кроме вот такого не приходит

DateTime now = DateTime.Now;
var q = from sc in Schedules 
        where 
        sc.ActualOnDays.Contains(now.ToString("ddd")) &
        (now.Hour >= sc.StartAt.Hour && now.Hour<=sc.EndAt.Hour) &
        (now.Minute >= sc.StartAt.Minute && now.Minute <= sc.EndAt.Minute) &
        (now.Second >= sc.StartAt.Second && now.Second <= sc.EndAt.Second)
        select sc;


Как-то громоздко выглядит.
Правда не проверял еще. По идее должно работать.
Re: Помогиет с LINQ запросом
От: _FRED_ Черногория
Дата: 06.07.09 17:35
Оценка:
Здравствуйте, PlotNick.lj, Вы писали:

PL>Помогите пожалуйста не могу составить правильный Linq запрос.


PL>имееться к примеру такая колекция расписаний.

PL>Class Shedule{
PL>  DateTime StartAt;
PL>  DateTime EndAt;
PL>  String ActualOnDays;
PL>}


Правильно ли понял, что по собственно дате дате фильтруется только ActualOnDays, а по StartAt\EndAt — время?

PL>Обратите внимание, что используеться буржуйский формат. То есть надо учитывать AM-PM.


А это тут причём?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Помогиет с LINQ запросом
От: Lloyd Россия  
Дата: 06.07.09 22:42
Оценка:
Здравствуйте, PlotNick.lj, Вы писали:

PL>Как-то громоздко выглядит.

PL>Правда не проверял еще. По идее должно работать.

Тогда уж

DateTime now = DateTime.Now;
var q = from sc in Schedules 
        let day = now.ToString("ddd")
        where sc.ActualOnDays.Contains(day) 
        && now >= sc.StartAt && now <= sc.EndAt
        select sc;
Re: Помогиет с LINQ запросом
От: Kore Sar  
Дата: 07.07.09 10:08
Оценка:
PL>Нужен запрос, который проверит есть ли в списке расписание в диапазон которого входит DateTime.Now То есть попросту говоря нужно проверить, актуален ли список расписаний прямо сейчас.
PL>Обратите внимание, что используеться буржуйский формат. То есть надо учитывать AM-PM.

Свои изменения выделил жирным.

class Shedule{
  DateTime StartAt; // Если используется только time, то лучше юзать TimeSpan
  DateTime EndAt;
  String ActualOnDays;
  bool Within(DateTime time) { return StartAt.TimeOfDay < time.TimeOfDay && time.TimeOfDay < EndAt.TimeOfDay; }
}


List<Shedule> Schedules = List<Shedule>();
Schedules.Add(
  new Shedule 
  { 
   StartAt = "01/01/0001 9:30:00 AM",
   EndAt   = "01/01/0001 7:30:00 PM",
   ActualOnDays = "MonTueWed"
  }
 );

var now = DateTime.Now;
var actual = Schedules.Where(s => s.Within(now));
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.