C# UOW模式-无法创建类型的常量值此上下文仅支持基元类型或枚举类型

C# UOW模式-无法创建类型的常量值此上下文仅支持基元类型或枚举类型,c#,linq,entity-framework,C#,Linq,Entity Framework,我在使用UOW模式和实体框架时遇到问题。下面的第一个linq orders1运行良好,并为SQL Server生成了一条SQL语句——它是第一次生成EF上下文的开箱即用数据库。在下面的第二个LINQ orders2中,我试图准备使用UOW模式并将数据库包装到存储库对象中,但它引发了异常:“无法创建yyy类型的常量值。在此上下文中仅支持基本类型或枚举类型。” linq的要点是查找在过去30天内没有订购相同RiskID的订单。是否有重写linq的方法,以便orders1不会调用上下文两次;或者在存储

我在使用UOW模式和实体框架时遇到问题。下面的第一个linq orders1运行良好,并为SQL Server生成了一条SQL语句——它是第一次生成EF上下文的开箱即用数据库。在下面的第二个LINQ orders2中,我试图准备使用UOW模式并将数据库包装到存储库对象中,但它引发了异常:“无法创建yyy类型的常量值。在此上下文中仅支持基本类型或枚举类型。”

linq的要点是查找在过去30天内没有订购相同RiskID的订单。是否有重写linq的方法,以便orders1不会调用上下文两次;或者在存储库模式中是否有一些技术可以遵循,以便在子查询中再次引用同一个表

所有这些都是EF5

using (var db = new xxxEntities())
{
    var orders1 =
    (from order in db.Orders
        where !db.Orders.Any(otherOrder =>
        otherOrder.RiskId == order.RiskId &&
        otherOrder.DateTimeOrdered < order.DateTimeOrdered &&
        otherOrder.DateTimeOrdered > EntityFunctions.AddDays(order.DateTimeOrdered, -30))
     select order
     ).ToList();
}

var repository = new Repository<Order>(new xxxEntities());

var orders2 =
    (from order in repository.DbSet
        where !repository.DbSet.Any(otherOrder =>
        otherOrder.RiskId == order.RiskId &&
        otherOrder.DateTimeOrdered < order.DateTimeOrdered &&
        otherOrder.DateTimeOrdered > EntityFunctions.AddDays(order.DateTimeOrdered, -30))
    select order
    ).ToList();
使用(var db=new xxxenties())
{
变量顺序1=
(从数据库订单中的订单)
其中!db.Orders.Any(otherOrder=>
otherOrder.RiskId==order.RiskId&&
otherOrder.DateTimeOrderedEntityFunctions.AddDays(order.DateTimeOrdered,-30))
选择订单
).ToList();
}
var repository=new repository(new xxxenties());
变量顺序2=
(从repository.DbSet中的订单)
where!repository.DbSet.Any(otherOrder=>
otherOrder.RiskId==order.RiskId&&
otherOrder.DateTimeOrderedEntityFunctions.AddDays(order.DateTimeOrdered,-30))
选择订单
).ToList();

这篇关于堆栈溢出的文章帮了大忙——我需要将DbSet转换为ObjectSet