谓词表达式过滤

时间:2014-01-25 18:55:04

标签: c# linq linq-to-sql

如何编写c#LINQ谓词表达式,以便我可以创建一个类似于以下内容的谓词:“select from from customer where order.orderDate> '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类包含Orders类型集合的属性。

2 个答案:

答案 0 :(得分:0)

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

var predicates = PredicateBuilder.True<Order>();        
DateTime specificDate = new DateTime(2014, 01, 24);
predicates = predicates.And(Order => Order.OrderDate > specificDate)

然后将其应用于您的加入条款中的订单:

IQueryable<Customer> source = database.Customers;
var results = source.SelectMany(
    customer => customer.Orders,
    (customer, order) => order).Where(predicates);

答案 1 :(得分:0)

看看是否有效:

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

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