Я еще не играл с релизом F # 3.0, но я думаю, что вам не нужно самостоятельно генерировать код IL.В публикации Кейта объясняется, что существует два типа провайдеров типов - сгенерированные , которые создают реальный тип .NET (который существует в некоторой библиотеке), и стертые , которыесоздайте поддельный тип, а затем дайте компилятору дерево выражений, которое будет использоваться вместо вызовов поддельного типа.
Мне кажется, что вы пытаетесь реализовать генерируемый типпровайдер в ситуации, когда стерт тип будет более уместным.В стертом случае вы сможете просто вернуть тип .NET Expression<..>
(не цитату F #, но вы можете использовать ToLinqExpression
из PowerPack), и компилятор F # скомпилирует это для вас.
Однако я еще не играл с ним, поэтому я не знаю, какой именно механизм.