如何在LINQ中使用DATEADD列 - LINQ无法识别DateAdd

Bry*_*can 26 c# linq

我试图使不到30天前被请求的友谊请求无效.

var requestIgnored = context.Request
    .Where(c => c.IdRequest == result.IdRequest 
             && c.IdRequestTypes == 1 
             && c.Accepted == false 
             && DateTime.Now <= (((DateTime)c.DateResponse).AddDays(30)))
   .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

c.DateResponse是类型的DateTime?.我遇到的错误是:

LINQ无法识别命令.AddDays

Sco*_*ner 51

编辑:如果您使用的是EntityFramework> = 6.0,请使用DbFunctions.AddDays.对于旧版本的Entity Framework,请使用EntityFunctions.AddDays:

var requestIgnored = context.Request
    .Where(c => c.IdRequest == result.IdRequest 
             && c.IdRequestTypes == 1 
             && c.Accepted == false 
             && DateTime.Now <= DbFunctions.AddDays(c.DateResponse, 30))
   .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

  • 然后你应该"接受答案".越过答案旁边的复选标记.这将归功于帮助您并帮助他人快速找到正确答案的人. (2认同)
  • 谢谢@BrettRigby,我已经更新了 EF 6 的答案 (2认同)

p.s*_*w.g 6

你可以试试这个:

var thirtyDaysAgo = DateTime.Now.AddDays(-30);
var requestIgnored = context.Request
    .Where(c => 
        c.IdRequest == result.IdRequest && 
        c.IdRequestTypes == 1 && 
        c.Accepted == false && 
        c.DateResponse.HasValue &&
        thirtyDaysAgo <= c.DateResponse.Value)
    .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)