Это невозможно. Это было бы похоже на требование, чтобы переменная типа string не содержала определенных символов. Компилятор не может проверить это, поскольку фактическое содержимое переменной известно только во время выполнения.
Тем не менее, преобразование лямбда-выражения в экземпляр Expression
выполняется компилятором, поэтому теоретически / технически можно представить себе «службу компилятора LINQ», которая интегрируется с компилятором, и предоставить информацию о поддерживаемые конструкции во время компиляции.
Очевидно, что потребуется много работы как в компиляторе, так и в поставщиках LINQ (разработчики LINQ должны в этом сценарии также реализовать этот «интерфейс компилятора linq» для интеграции с этой службой компилятора).
Я бы не рассчитывал, что это будет доступно в ближайшем будущем. Может быть, весь «компилятор как сервис» (он же Рослин) мог включить этот сценарий?