LINQ отображать предыдущую дату - PullRequest
1 голос
/ 23 июля 2011

У меня есть таблица MS SQL 2008 с данными из регистратора погоды.

формат таблицы

LogDate (nvarchar) 01/04/2010
LogTime (nvarchar) 10: 00
LogMonth (nvarchar) апрель
LogYear (nvarchar) 2010
Дождь_День (Двухместный) 5.6

Ежедневное чтение итогов дождя в 08:59 следующего дня. Таким образом, в таблице показано 5,6 мм, например: 03/04/2010 в 08:59, но на самом деле это общая сумма за предыдущий день, т.е. 02/04/2010. Все показания дождя - выходной, и последний день значения месяца отображается для первого дня следующего месяца.

Есть ли способ перечислить вышеуказанные значения дождя для даты 02/04/2010 вместо 03/04/2010? Столбцы даты и времени представлены в строковом формате. Этот код работает нормально, но даты выходного дня, как указано выше.

Редактировать Исправлен код от побитового до условного &&

var q = from c in context.Wxlogs
               where
               c.LogYear == year && c.LogMonth == month && c.Time.Contains("08:59")
               orderby c.LogDate                    
               select new {c.LogDate, c.Rain_today};

данные таблицы

апрель 2010 г. 01.04.10 09:00 0,0
Апр 2010 01/04/10 09:01 0,0
Апр 2010 01.04.10 19:02 23,7
Апр 2010 02/04/10 00:03 23,8
Апр 2010 02.04.10 08:59 23.8 - время чтения

Надеюсь, это имеет смысл.
Любая помощь будет оценена.
Спасибо Белинда

Ответы [ 2 ]

1 голос
/ 24 июля 2011

Мне удалось разобраться с этим !! Было добавлено новое поле LogDate2, и LogDate был преобразован из Nvarchar в тип данных DateTime и заполнен значениями LogDate.

Поскольку некоторые функции LINQ недоступны при использовании Entity Framework, например LogDate.Day или LogDate.Month Я использовал EntityFunctions, которые предоставляли возможность использовать методы CLR.

См. EntityFunctions

Итак, новый код ниже работает отлично. Это может быть не самый лучший или самый эффективный способ сделать это, но он дает правильные результаты.

var q = from c in context.Wxlogs
               where
               c.LogYear == year && c.LogMonth == mm && c.LogTime.Contains("08:59")
               orderby c.LogDate2
                let dm = EntityFunctions.AddDays(c.LogDate2, -1)
                select new {dm, c.Rain_today};

Большое спасибо всем, кто направил меня в правильном направлении

1 голос
/ 23 июля 2011

Прежде чем идти дальше. Предложение «И» неверно, вы используете побитовый оператор.

это должно быть &&, а не &

ИЛИ это просто ТИПО?

var q = from c in context.Wxlogs
               where
               c.LogYear == year && c.LogMonth == month && c.Time.Contains("08:59")
               orderby c.LogDate                    
               select new {c.LogDate, c.Rain_today};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...