Linq中的DateTime操作实体查询

Dan*_*ani 8 linq-to-entities entity-framework-4

运行此代码:

public bool CheckTime(DateTime date, int UserID, int TotalTimeMin)
        {
            using (var context = new myDB())
            {         
                var assginments = from c in context.Assignments.Where(x=>(x.AssignmentDateTime < date && x.AssignmentDateTime.Value.AddMinutes(TotalTimeMin) > date) || 
                    (x.AssignmentDateTime < date.AddMinutes(TotalTimeMin))) select c;

                if(assginments != null) return false;
                else return true;
            }


        }
Run Code Online (Sandbox Code Playgroud)

我收到这个错误.

LINQ to Entities does not recognize the method 'System.DateTime AddMinutes(Double)' method, and this method cannot be translated into a store expression.
Run Code Online (Sandbox Code Playgroud)

TotalTimeMin是int.我不确定是什么原因导致的:AssignmentDateTime是DateTime?也许这就是问题?

Cra*_*ntz 16

使用EntityFunctions.AddMinutes(需要EF 4):

    public bool CheckTime(DateTime date, int UserID, int TotalTimeMin)
    {
        using (var context = new myDB())
        {         
            var assginments = context.Assignments
                                     .Where(x=>(x.AssignmentDateTime < date 
                                                && EntityFunctions.AddMinutes(x.AssignmentDateTime,TotalTimeMin) > date) 
                                                || (x.AssignmentDateTime < date.AddMinutes(TotalTimeMin)));

            if(assginments != null) return false;
            else return true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

请注意,assignments永远不会为空(但也可能是空的-测试assignments.Any()).

  • 显然,实体功能已经过时了.现在可以使用DbFunctions.AddMinutes()(EF 6.x). (3认同)