使用Linq [重复]创建不超过30天的项目列表

问题描述 投票:-1回答:1

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

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

但是目前返回错误

'LINQ to Entities无法识别方法'System.DateTime AddDays(Double)',并且该方法无法转换为商店表达式。'

这是什么原因?

c# linq-to-entities
1个回答
1
投票

将其声明为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

© www.soinside.com 2019 - 2024. All rights reserved.