Stačí ten typ zjistit za chodu, tipuji, že to vrátí IQueryable<něco>, přetypovaného na IQueryable, takže pokud za běhu zjistíš typ, tak si vygeneruješ expression tree, ze které složíš pak LambdaExpression pro FirstOrDefault.
Například, když jsem dělal implementoval sort s tím, že jsem dostal IQueryable a dostal jsem jen název parametru, tak jsem řešil podobné obtíže. Mohlo by ti to možná pomoct.
[C#] public static IQueryable<T> Sort<T>(this IQueryable<T> list, String sortBy, Stri - Pastebin.com
http://pastebin.com/LSnT5WiW