3

我正在尝试删除表中所有超过 3 小时的项目,但出现以下错误...

DbArithmeticExpression 参数必须具有数字通用类型。

// Method to clean items in baskets table which are over 3 hours old.
public void CleanBasket()
{
    var expired = (from a in db.Baskets
                   where (DateTime.Now - a.DateCreated).TotalHours > 3  select a);
    foreach (Basket basket in expired) db.DeleteObject(expired);
    db.SaveChanges();
}

我以前从未见过这个错误,有人可以帮我调试吗?

仅供参考,我也尝试过... var expired = (from a in db.Baskets where (DateTime.Now.Subtract(a.DateCreated).Hours > 3) select a);

但我收到错误消息“LINQ to Entities 无法识别方法 'System.TimeSpan Subtract(System.DateTime)' 方法,并且此方法无法转换为存储表达式。”

4

2 回答 2

2

EF 不支持DateTime - DateTime

于 2012-04-23T23:03:03.993 回答
0

您需要按照此答案 使用System.Data.Entity.DbFunctions.DiffHours :

https://stackoverflow.com/a/9860858/345659

var expired = (from a in db.Baskets
               where DbFunctions.DiffHours(DateTime.Now, a.DateCreated) > 3
               select a);
于 2015-10-12T02:41:41.607 回答