Я создал некоторые дополнительные функции в своих классах Linq-to-SQL, чтобы упростить процесс разработки приложений. Например, я определил свойство, которое извлекает активные контракты из списка контрактов. Однако, если я пытаюсь использовать это свойство в лямбда-выражении или вообще в запросе, оно либо выдает исключение, что нет никакого оператора SQL, соответствующего этому свойству, либо генерирует один запрос на элемент (= много обращений к серверу).
Сами запросы не слишком сложны, например:
var activeContracts = customer.Contracts.Where(w => w.ContractEndDate == null);
В то время как я хотел бы, чтобы это читалось как:
var activeContracts = customer.ActiveContracts;
Основная причина, по которой я это делаю, заключается в том, что это минимизирует логические ошибки с моей стороны, и если я в будущем захочу изменить то, что определяет активный контракт, мне не нужно будет много кода переделывать.
Есть ли способ указать для свойства, какой SQL он должен генерировать. Или есть способ убедиться, что его можно использовать в запросе, как показано ниже?
var singleContractCustomers = db.Customers.Where(w => w.ActiveContracts.Count() == 1);