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

C# 使用Linq创建不超过30天的项目列表,c#,linq-to-entities,C#,Linq To Entities,我有一个这样的方法 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>

我有一个这样的方法

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();
    }
}
公共类站点
{
公共虚拟ICollection所需详细信息{get;private set;}
公共int?IncomingOSI(站点s)
{
PIC_程序_1_0上下文db=新PIC_程序_1_0上下文();
List so=db.salesforders
.其中(x=>x.siteID==s.ID)
.Where(x=>x.DateCreated>DateTime.Now.AddDays(-30)).ToList();
}
}
但目前它返回的错误为

“LINQ to Entities无法识别方法”System.DateTime AddDays(Double)”方法,并且无法将此方法转换为存储表达式。”


原因是什么?

将其声明为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();
   }
}

公共类站点
{
公共虚拟ICollection所需详细信息{get;private set;}
公共int?IncomingOSI(站点s)
{
PIC_程序_1_0上下文db=新PIC_程序_1_0上下文();
//在表达式之外声明它
var less30days=DateTime.Now.AddDays(-30);
List so=db.salesforders.Where(x=>x.siteID==s.ID).Where(x=>x.DateCreated>less30天).ToList();
}
}
这里的答案解释了原因;Linq将无法运行其他C#代码,因为它将无法将其转换为sql表达式

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


旁注:您可能搜索了错误消息,但出于某种原因决定不在帖子中显示您的研究结果。这可能会导致帖子被否决,因为“这个问题没有显示任何研究成果”…@AlexeiLevenkov好的,谢谢你的澄清,你能不能把这两个
Where()
条件合并成一个:
Where(x=>x.siteID==s.ID&&x=>x.DateCreated>less30天)