Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2012, 13:43   #11
kenji
Пользователь
 
Регистрация: 28.10.2010
Сообщений: 22
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
Где тут лишний код?

Не хотите анонимный метод сделайте нормальный, я как то не понимаю в чем проблема у вас.
Существует много таблиц в БД, где есть поле с типом DateTime. Оно содержит серверное время. Мне нужно переводить его в клиентское. С помощью специальной функции я получаю разницу в минутах. Чтобы получить разницу во времени надо обращаться в Cookie (она там записана).
То есть я хочу один раз получить разницу времени, записать её в offset и уже обработать большое кол-во данных.

У меня сейчас получается так:
Код:
List<signal> signals = (from signal in DB.signals
                                    where signal.system == system
                                    orderby signal.dt_create descending
                                    select signal).ToList();

            double offset = Extension.ClientServerOffset(); // лишний код
            signals.ForEach(h => h.dt_create = h.dt_create.AddMinutes(offset));

Последний раз редактировалось kenji; 21.10.2012 в 13:47.
kenji вне форума Ответить с цитированием
Старый 21.10.2012, 14:09   #12
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

О уже интересно, а как данные попадают с сервера на клиент?
Тут такое дело, что можно вкинуть данные серверное зоны в дату, а клиент и без вашего кода умеет перегонять.
eval вне форума Ответить с цитированием
Старый 21.10.2012, 14:16   #13
kenji
Пользователь
 
Регистрация: 28.10.2010
Сообщений: 22
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
О уже интересно, а как данные попадают с сервера на клиент?
Тут такое дело, что можно вкинуть данные серверное зоны в дату, а клиент и без вашего кода умеет перегонять.
Это вэб приложение ASP MVC3. Поэтому все данные уже должны готовыми попадать в браузер клиента.
kenji вне форума Ответить с цитированием
Старый 21.10.2012, 14:23   #14
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Тогда в базе делать, в запросе.
Подаете ей офсет и всех дел.
eval вне форума Ответить с цитированием
Старый 21.10.2012, 14:30   #15
kenji
Пользователь
 
Регистрация: 28.10.2010
Сообщений: 22
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
Тогда в базе делать, в запросе.
Подаете ей офсет и всех дел.
Да вот именно каждый раз подавать офсет надо перед запросом. Хочу спрятать его в функцию, причём функция для коллекции универсального типа.

Должен же быть способ изменять поля в коллекции посредством пользовательской функции.
kenji вне форума Ответить с цитированием
Старый 21.10.2012, 14:53   #16
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

А, у вас же запрос такой..... я говорил про базу, а не про линк-запрос...
Ну так и закинте ее в функцию, чтобы получилось типа того:
ToClientTime((h, offset) => h.dt_create = h.dt_create.AddMinutes(offset))
eval вне форума Ответить с цитированием
Старый 21.10.2012, 15:50   #17
kenji
Пользователь
 
Регистрация: 28.10.2010
Сообщений: 22
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
А, у вас же запрос такой..... я говорил про базу, а не про линк-запрос...
Ну так и закинте ее в функцию, чтобы получилось типа того:
ToClientTime((h, offset) => h.dt_create = h.dt_create.AddMinutes(offset))
Вау, супер! То что было нужно.

Код:
public static IEnumerable<T> ToClientTime<T>(this IEnumerable<T> sourse, Func<T, double, DateTime> func)
        {
            double offset = ClientServerOffset();

            foreach (T item in sourse)
            {
                func(item, offset);
            }

            return sourse;
        }
Огромное спасибо!

Правда я ещё один способ нашёл

Код:
        public static IEnumerable<T> ToClientTime<T>(this IEnumerable<T> sourse, string field, Func<T,DateTime> func)
        {
            double offset = ClientServerOffset();
            
            foreach (T item in sourse)
            {
                DateTime dt = ((DateTime)item.GetType().GetProperty(field).GetValue(item, null)).AddMinutes(offset);
                item.GetType().GetProperty(field).SetValue(item, func(item).AddMinutes(offset), null);
            }

            return sourse;
        }
На вход подаём строку с именем поля и селектор. Но это кустарный метод.

Последний раз редактировалось kenji; 21.10.2012 в 16:03.
kenji вне форума Ответить с цитированием
Старый 21.10.2012, 15:53   #18
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Да при чем тут DateTime? он вам не нужен
вам надо только выше передать итем и офсет, а в функции у итема изменить поле с датой, всё.

посмотрите как сделан Action<T>, и по образу сделайте свой.

Цитата:
Правда я ещё один способ нашёл
Это рефлекшн, он тут а ниграмма не оправдан. тяжелый он ... да и функ тут ни к селу.. выаще кривой

Последний раз редактировалось Stilet; 21.10.2012 в 16:24.
eval вне форума Ответить с цитированием
Старый 21.10.2012, 16:20   #19
kenji
Пользователь
 
Регистрация: 28.10.2010
Сообщений: 22
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
посмотрите как сделан Action<T>, и по образу сделайте свой.
Да, так грамотней будет)

Код:
        public static IEnumerable<T> ToClientTime<T>(this IEnumerable<T> sourse, Action<T, double> func)
        {
            double offset = 60; // ClientServerOffset();

            foreach (T item in sourse)
            {
                func(item, offset);
            }

            return sourse;
        }
А можно как-то компактней сделать входное выражение?
а то (h, offset) => h.dt_create = h.dt_create.AddMinutes(offset) очень длинное))
kenji вне форума Ответить с цитированием
Старый 21.10.2012, 16:30   #20
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
А можно как-то компактней сделать входное выражение?
(h, o) => h.dt_create = h.dt_create.AddMinutes(o)
сойдет? куда тут еще компактнее, ну или напишите отдельную функцию,
в нее перенесите этот код, тогда получите что-то типа:
(h, o) => aclass.z(h, o)
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как дописать данные из одного MemoryStream в другой? iiunbreakableii Общие вопросы Delphi 2 01.04.2011 08:17
Как данные из одного файла Excel сохранить в другой? Papiruzzz Microsoft Office Excel 3 17.01.2011 13:14
Как данные из полей ввода передать на другую страницу Arassir PHP 1 01.02.2010 22:42
как вставить данные из полей ввода в текст Arassir JavaScript, Ajax 2 20.01.2010 17:24
как раскидать сгруппированные данные из одного стобца по нескольким hudoi Microsoft Office Excel 2 07.02.2007 23:42