Linq to Entities SqlFunctions.DatePart

时间:2014-07-15 12:28:38

标签: c# linq-to-entities

此代码产生错误:

void GetLog()
{
    List<CAR_STATUS_LOGS> logs = null;
    using (TESTEntities ctx = new TESTEntities())
    {
        logs = 
            ctx.CAR_STATUS_LOGS
                .Where(a => SqlFunctions.DatePart("DAY", a.TIMEMARK) == 1)
                .ToList();
    }
}

错误是这样的:

  

LINQ to Entities无法识别方法'System.Nullable`1 [System.Int32] DatePart(System.String,System.Nullable`1 [System.DateTime])'方法,而且此方法无法转换为商店表达。

我看不出我对SqlFunctions.DatePart做错了什么。 TIMEMARK列是Sqlserver DateTime类型 有什么想法吗?

4 个答案:

答案 0 :(得分:14)

您可以使用程序集EntityFramework.SqlServer.dll(Entity Framework 6.1.3)中的System.Data.Entity.SqlServer.SqlFunctions,例如:

myTable.Where (w => 
    (System.Data.Entity.SqlServer.SqlFunctions.DatePart("weekday", w.Data).Value == 1);

答案 1 :(得分:0)

DbFunctions.DiffDays(Date1,Date2)==1

答案 2 :(得分:-1)

写日而不是DAY

SqlFunctions.DatePart("day", a.TIMEMARK) == 1).ToList();

因为一天代表

  

dd,d

了解更多详情: -

http://www.w3schools.com/sql/func_datepart.asp

答案 3 :(得分:-2)

如果a.TIMEMARK是一个datime,你可以通过a.TIMEMARK.Day

访问这一天。