powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq и обрезаная дата
25 сообщений из 99, страница 1 из 4
Linq и обрезаная дата
    #37790077
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот моя проблема

Есть таблица в MS SQL, название - BirthDay (данные записаны как 01.01.2001) год берется просто так, потому что мне год рождения сотрудников не говорят а только день и месяц.

Так вот возникла проблемка (может быть и простая) но я что то не могу решить -
Как составить запрос (выборку дат 01.01 не учитывая года) от текущей даты + 7 дней

например сегодня 11.05 и результат запроса должен дать выборку с 11.05 по 18.05 (+ 7 дней)


Спасибо!
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37790467
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
var employees = ctx.Employees.Where(d => d.BirthDay.Month == 5 && d.BirthDay.Day >= 11 && d.BirthDay.Day <= 18);
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37790512
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ
Код: c#
1.
var employees = ctx.Employees.Where(d => d.BirthDay.Month == 5 && d.BirthDay.Day >= 11 && d.BirthDay.Day <= 18);

Нет!

VIT2708Есть таблица в MS SQL, название - BirthDay (данные записаны как 01.01.2001) год берется просто так, потому что мне год рождения сотрудников не говорят а только день и месяц.Ну и исходите из того, что в БД хранится фиктивный 2001-й год. Заменяйте текущий год 2001-м и обычным способом расчитывайте границы интервала. Чтобы потом сделать select * from T where BirthDay between @from and @to , или его LINQ-аналог.
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37790519
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНет!
Да!

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DateTime dateStart = DateTime.Today;
int incDays = 7;

int monthStart = dateStart.Month;
int dayStart = dateStart.Day;

int monthEnd = dateStart.AddDays(incDays).Month;
int dayEnd = dateStart.AddDays(incDays).Day;

var employees = ctx.Employees.Where(d => 
    (d.BirthDay.Month == monthStart && d.BirthDay.Day >= dayStart) || 
    (d.BirthDay.Month == monthEnd  && d.BirthDay.Day <= dayEnd)
);
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37790521
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или на сиквеле:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare @d1 as datetime
declare @d2 as datetime

set @d1 = '20110321 00:00:00'
set @d2 = '20110327 23:59:59'

select FullName, new_dob
from Contact
where cast(datediff(dd, new_dob, @d1) / 365.25 as int) - cast(datediff(dd, new_dob, @d2) / 365.25 as int) <> 0
order by new_dob
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37790550
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант на linq, если разница monthSpan <= 1 :)

Код: c#
1.
int monthSpan = (dateEnd.Year - dateStart.Year) * 12 + dateEnd.Month - dateStart.Month;
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37790564
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУindex seek нам не нужен?
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37790610
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУindex seek нам не нужен?
Пох.
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37790768
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
index seek нам не нужен?
Пох.Согласен. :-)
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37792662
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправляю косяки linq-запроса, Лёня :)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
int days = 7;
var now = DateTime.Today;

var employees = from emp in ctx.Employees
                let thisYearsBirthday = emp.BirthDay.AddYears(now.Year - emp.BirthDay.Year) 
                let nextBirthday = (thisYearsBirthday >= now) ? thisYearsBirthday : thisYearsBirthday.AddYears(1)
                where nextBirthday >= now && nextBirthday < now.AddDays(days)
                select emp;
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37792954
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как так-то?!

Код: c#
1.
2.
3.
4.
5.
6.
7.
const int fakeYear = 2001;
const int days = 7;

var t1 = new DateTime(fakeYear, DateTime.Now.Month, DateTime.Now.Day);
var t2 = t1.AddDays(days);

employees = ctx.Employees.Where(e => e.BirthDay >= t1 && e.BirthDay <= t2);
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37792998
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу как так-то?!
А если мы выполним этот код 31.12.2012? :)
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793089
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНу как так-то?!
А если мы выполним этот код 31.12.2012? :)Всё можно сломать, было бы желание.
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793097
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Краевой эффект.
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793103
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793304
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу как так-то?!

Код: c#
1.
2.
3.
4.
5.
6.
7.
const int fakeYear = 2001;
const int days = 7;

var t1 = new DateTime(fakeYear, DateTime.Now.Month, DateTime.Now.Day);
var t2 = t1.AddDays(days);

employees = ctx.Employees.Where(e => e.BirthDay >= t1 && e.BirthDay <= t2);



Cпасибо всем работает, но надо что бы проверка была без года.
Буду экспериментировать
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793366
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

вот у меня проблема как тогда в базе поменять года не трогая дня и месяца
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793384
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708Алексей К,

вот у меня проблема как тогда в базе поменять года не трогая дня и месяцаНу тогда моё решение Вам не подходит. Краевой эффект () опять же. Попробуйте развить идеи, предложенные МСУ.
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793396
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

Подходит, только раз в год нажимать кнопку модификации года в базе
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793404
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КVIT2708Алексей К,

вот у меня проблема как тогда в базе поменять года не трогая дня и месяцаНу тогда моё решение Вам не подходит. Краевой эффект () опять же. Попробуйте развить идеи, предложенные МСУ.

У него тоже в коде проблема что год берется текущий а в базе год остается старый
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793427
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708У него тоже в коде проблема что год берется текущий а в базе год остается старыйТолько при сравнении год игнорируется. Жертвуем index seek, но без этого походу никак.

В общем, можно как-то так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    const int Days = 7

    var nowMonth = DateTime.Now.Month;
    var nowDay = DateTime.Now.Day;

    return from e in ctx.Employees
        let t1 = new DateTime(e.BirthDay.Year, nowMonth, nowDay)
        let t2 = t1.AddDays(Days)
        where e.BirthDay >= t1 && e.BirthDay <= t2
        select e;
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793434
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

А если дата попадает на конец месяца?

Извини что много вопросов я сайт делаю и сразу изучаю Linq
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793448
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708А если дата попадает на конец месяца?Ну и что? Мне кажется, моё последнее решение работает и в этом случае. Тут надо пробовать. У меня сейчас Visual Studio под рукой нет.
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793454
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

Спасибо! Сейчас поэкспериментирую
...
Рейтинг: 0 / 0
Linq и обрезаная дата
    #37793489
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

Огромнейшее спасибо я решил проблему

protected void LinqDataSource2_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
const int Days = 7;
var nowMonth = DateTime.Now.Month;
var nowDay = DateTime.Now.Day;
var filter = from f in dc.BirthDays let t1 = new DateTime(2013, nowMonth, nowDay) let t2 = t1.AddDays(Days) where f.birthday1_feild >= t1 && f.birthday1_feild <= t2 orderby f.birthday1_feild select f;
e.Result = filter;
}
...
Рейтинг: 0 / 0
25 сообщений из 99, страница 1 из 4
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq и обрезаная дата
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]