【问题标题】:How to use DATEADD over column in LINQ - DateAdd is not recognized by LINQ如何在 LINQ 中的列上使用 DATEADD - LINQ 无法识别 DateAdd
【发布时间】:2013-06-28 18:59:44
【问题描述】:

我正在尝试使不到 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();

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

LINQ 无法识别命令 .AddDays

【问题讨论】:

标签: c# linq


【解决方案1】:

编辑:如果您使用的是 EntityFramework >= 6.0,请使用 DbFunctions.AddDays。对于旧版本的实体框架,请使用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();

【讨论】:

  • EntityFunctions 对我来说是一个新世界!!谢谢你!!这真的很好。
  • 您应该“接受作为答案”。勾选答案旁边的复选标记。这将归功于帮助您的人,并帮助其他人快速找到正确的答案。
  • 请注意,EntityFunctions 只能在 EF 上下文中工作。尝试评估该方法(即在本地集合上进行单元测试)将引发异常。
  • 刚找到这个帖子并实现了上面的代码,被告知 System.Data.Entity.Core.Objects.EntityFunctions 现在已经过时了,取而代之的是 System.Data.Entity.DbFunctions。
  • 感谢@BrettRigby,我已经更新了 EF 6 的答案
【解决方案2】:

你可以试试这个:

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多