LINQ显示上一个日期

时间:2011-07-23 04:54:32

标签: c# entity-framework linq-to-sql

我有一个ms sql 2008表,其中包含来自天气数据记录器的数据。

表格式

LogDate(nvarchar)01/04/2010
LogTime(nvarchar)10:00
LogMonth(nvarchar)APR
LogYear(nvarchar)2010
Rain_Today(双人)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年4月01/04/10 09:00 0.0
2010年4月01/04/10 09:01 0.0
2010年4月01/04/10 19:02 23.7
2010年4月02/04/10 00:03 23.8
2010年4月02/04/10 08:59 23.8 - 阅读时间

希望这是有道理的 任何帮助将不胜感激 谢谢贝琳达

2 个答案:

答案 0 :(得分:1)

继续前进。 “AND”子句是错误的,您使用的是按位运算符。

它应该是&&而不是&

或者它只是一个TYPO?

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};

答案 1 :(得分:1)

我设法解决了这个问题!!添加了一个新字段LogDate2,并将LogDate从Nvarchar转换为DateTime数据类型,并使用LogDate的值进行填充。

由于某些LINQ功能无法使用实体框架,例如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};

非常感谢所有指导我朝着正确方向前进的人