Как запросить метку времени в SQL Server 2008 с Linq-to-Entities? - PullRequest
3 голосов
/ 05 декабря 2010

У меня есть столбец timestamp в SQL Server 2008.

Теперь мне нужно запросить этот столбец, используя дату, полученную из серверного элемента управления календаря.

Мы предполагаем, что я получил объект DateTime dt;

Мне нужно отфильтровать по этому объекту datetime, который возвращает все записи, зарегистрированные в эту дату (dt).

   var a = DateTime.Now.ToString();
   var IsDone = from d in _le.diets
                 where d.log_time.Contains(a)
                 select d.done;

_le - это объект структуры частной сущности.

У этого кода есть проблема:

Ошибка 3 'byte []' не содержит определение для «содержит» и лучшее перегрузка метода расширения «System.Linq.ParallelEnumerable.Contains (System.Linq.ParallelQuery, TSource) 'имеет недопустимый аргументы f: \ tests \ diet \ diet \ DataTier \ DietMovieRepository.cs 30 32 diet

Ошибка 2 Не удалось преобразовать лямбду выражение для типа «строка», потому что это не делегат введите f: \ tests \ diet \ diet \ DataTier \ DietMovieRepository.cs 30 26 диет

Ошибка 1 делегата 'System.Func' не берет 1 Аргументы f: \ tests \ diet \ diet \ DataTier \ DietMovieRepository.cs 30 26 диет

Ошибка 4: аргумент экземпляра: невозможно конвертировать из 'byte []' в 'System.Linq.ParallelQuery' f: \ tests \ diet \ diet \ DataTier \ DietMovieRepository.cs 30 32 diet

Я новичок в EF, спасибо за помощь!

UPDATE

IN EF CS файл

Понятно

   public static diet Creatediet(global::System.Int64 id, global::System.Boolean done, global::System.Byte[] log_time)
        {
            diet diet = new diet();
            diet.id = id;
            diet.done = done;
            diet.log_time = log_time;
            return diet;
        }

Ответы [ 2 ]

3 голосов
/ 05 декабря 2010

SQL-метка «timestamp» не имеет ничего общего со временем (фактически имя «timestamp» теперь помечено как устаревшее; «rowversion» идентично и должно использоваться вместо него).

Если вы действительно имеете«отметка времени» это невозможно.Если для даты и времени установлено время вставки, оно должно быть тривиальным:

DateTime start = date.Date, end = start.AddDays(1);

...
where row.log_time >= start && row.log_time < end
...

Кроме того, если вы в основном выполняете поиск в диапазоне дат, log_time может быть подходящим кандидатом для кластеризованного индекса.Или, если вы выполняете запросы на основе дня, некластеризованный индекс для целого числа, равного дням в эпохе, тоже будет работать.

0 голосов
/ 05 декабря 2010

Предполагая, что вы хотите посмотреть только часть даты? Тогда вы должны быть в состоянии сделать что-то вроде:

   var a = DateTime.Now;
   var isDone = from d in _le.diets
                 where d.log_time.Date == a.Date
                 select d.done;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...