[英]casting to datetime data to month and year in C#
我对下面的实体查询使用linq,但是我希望where子句在其后使用示例T-SQL代码中的逻辑。
var myList = from p in ctx.myTable
where !ctx.Report.Any(m => m.ReportDate == DateTime.Today && m.ReportDate == DateTime.Today)
select p;
我该如何比较我的where子句中的月份和年份,例如下面的T-SQL?
WHERE month(R.ReportDate) = month(GETDATE()) AND YEAR(R.ReportDate) = YEAR(GETDATE()))
在LINQ to Entities中处理日期有些棘手。
我不确定您能否在SQL中生成
MONTH()
或
YEAR()
。
但是
您绝对可以使用正确的m
或y
作为datepart生成DATEPART
调用。
使用SqlFunctions.DatePart
方法(字符串,字符串)执行此操作:
var todayMonth = DateTime.Today.Month;
var todayYear = DateTime.Today.Year;
var myList = from p in ctx.myTable
where !ctx.Report.Any(m => SqlFunctions.DatePart("m", m.ReportDate) == todayMonth && SqlFunctions.DatePart("y", m.ReportDate) == todayYear)
select p;
应该产生
WHERE DATEPART(m, R.ReportDate) = 2 AND DATEPART(y, R.ReportDate) = 2014)
如果您确实需要GETDATE()
部分,则可以使用以下代码:
var myList = from p in ctx.myTable
where !ctx.Report.Any(m => SqlFunctions.DatePart("m", m.ReportDate) == SqlFunctions.DatePart("m", SqlFunctions.GetDate()) && SqlFunctions.DatePart("y", m.ReportDate) == SqlFunctions.DatePart("y", SqlFunctions.GetDate()))
select p;
更新资料
我刚发现该页面: CLR方法到规范函数映射 ,其中指出, DateTime.Month
和DateTime.Year
属性已转换为MONTH
和YEAR
方法,因此以下方法应该可以正常工作:
var myList = from p in ctx.myTable
where !ctx.Report.Any(m => m.ReportDate.Month == SqlFunctions.GetDate().Month && m.ReportDate.Year == SqlFunctions.GetDate().Year)
select p;
DateTime
对象具有Month
和Year
属性。 您可以利用它。
DateTime dateTime = new DateTime();
if (dateTime.Month > DateTime.Today.Month) {
// Do something
}
if (dateTime.Year> DateTime.Today.Year)
{
// Do something
}
由于DateTime包含年和月,请尝试以下操作。
where !ctx.Report.Any(m => m.ReportDate.Month == DateTime.Today.Month && m.ReportDate.Year == DateTime.Today.Year)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.