Это один из способов достижения этого.
void ProcessOrders(Expression<Func<Order, bool>> orderCondition,
Expression<Func<Customer, bool>> customerCondition>>)
{
var orders = Database.Query<Order>().Where(orderCondition);
var customers = Database.Query<Customer>().Where(customerCondition);
var q = from o in orders join c in customers on o.CustomerId == c.Id
select new {o, c}
}
Опять же, в зависимости от ORM, что-то вроде этого может также работать (я предполагаю, что свойство коллекции Customer.Orders загружается лениво):
void ProcessOrders(Expression<Func<Order, bool>> orderCondition,
Expression<Func<Customer, bool>> customerCondition>>)
{
var customers = Database.Query<Customer>().Where(customerCondition);
var q = from c in customers
let orders = c.Orders.Where(orderCondition)
select new {c, orders}
}
Любое решение должно быть проверено на конкретном поставщике linq, поскольку разные поставщики linq могут поддерживать или не поддерживать определенные запросы ...