使用 Linq 创建不超过 30 天的项目列表

Creating list of items that are not older than 30 days with Linq

我有一个看起来像这样的方法

public class Site
{
    public virtual ICollection<SalesOrder> soDetails { get; private set; }

    public int? IncomingOSI(Site s)
    {
        PIC_Program_1_0Context db = new PIC_Program_1_0Context();
        List<SalesOrder> so = db.SalesOrders
          .Where(x => x.siteID == s.ID)
          .Where(x => x.DateCreated > DateTime.Now.AddDays(-30)).ToList();
    }
}

但目前这个 returns 是

的错误

'LINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)' method, and this method cannot be translated into a store expression.'

这是什么原因?

将其声明为 linq 表达式之外的变量。

public class Site
{
   public virtual ICollection<SalesOrder> soDetails { get; private set; }

   public int? IncomingOSI(Site s)
   {
      PIC_Program_1_0Context db = new PIC_Program_1_0Context();

      // declare it outside of the expression
      var less30days = DateTime.Now.AddDays(-30);

      List<SalesOrder> so = db.SalesOrders.Where(x => x.siteID == s.ID).Where(x => x.DateCreated > less30days).ToList();
   }
}

这里的答案说明了原因; Linq 将无法 运行 其他 C# 代码,因为在将其转换为 sql 表达式时会遇到问题。

LINQ to Entities does not recognize the method