繁体   English   中英

在C#中将日期时间数据转换为月份和年份

[英]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() 但是 您绝对可以使用正确的my作为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.MonthDateTime.Year属性已转换为MONTHYEAR方法,因此以下方法应该可以正常工作:

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对象具有MonthYear属性。 您可以利用它。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM