C# 谓词表达式过滤

C# 谓词表达式过滤,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,如何编写一个c LINQ谓词表达式,以便创建一个类似于:Select。。。从客户那里下单。订单日期>'01/24/2014' 我正在这样尝试,但不确定如何准确构建它: Expression<Func<Cutomser, bool>> predicates = PredicateBuilder.True<Cutomser>(); predicates = predicates.And(x => x.Orders.OrderDate >

如何编写一个c LINQ谓词表达式,以便创建一个类似于:Select。。。从客户那里下单。订单日期>'01/24/2014' 我正在这样尝试,但不确定如何准确构建它:

Expression<Func<Cutomser, bool>> predicates = PredicateBuilder.True<Cutomser>();        
predicates  = predicates.And(x => x.Orders.OrderDate > DateTime.Now.AddDays(-1))

我想让它考虑所有订单数量大于“01/24/2014”的订单。Customer类持有订单集合类型的属性

似乎您正在尝试为联接中的第二个表创建联接和谓词。 谓词应该是第二个表的类型,而不是第一个表的类型

var predicates = PredicateBuilder.True<Order>();        
DateTime specificDate = new DateTime(2014, 01, 24);
predicates = predicates.And(Order => Order.OrderDate > specificDate)
然后将其应用于join子句中的订单:

IQueryable<Customer> source = database.Customers;
var results = source.SelectMany(
    customer => customer.Orders,
    (customer, order) => order).Where(predicates);
看看这是否有效:

var orderDate = new DateTime(2014, 24, 1);

predicates = predicates.And(x => x.Orders.Any(y => y.OrderDate > orderDate);

关但不能使用x.Orders.OrderDate。因为订单是一个集合。这样使用它需要像x.Orders[0].OrderDate.ok这样的索引。这会起作用,但我如何组合:predicates=PredicateBuilder.True;和predicates2=PredicateBuilder.True;不完全如此,如果发现一个订单的OrderDate大于该日期,则条件将返回true。我试着为所有满足条件的人做这件事。也使用命令。所有操作都不起作用。因为只有当all大于日期时,才会返回true。@Jay您想为all而不是all执行此操作吗?什么意思?