Я не уверен, что это именно то, что вы ищете, но Скотт Гу имеет пост в своем блоге об использовании динамического LINQ. http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
Он может делать не все, что вам нужно, но может помочь вам.
EDIT. Я просто посмотрел пример кода, который имел Скотт Гу, и обнаружил, что он может выполнять ту часть выбора, которая вам нужна. Пример (это код Скотта):
Dim query = db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10). _
OrderBy("CompanyName"). _
Select("New(CompanyName as Name, Phone)")
Как видите, нижний бит имеет динамический выбор.
Кроме того, чтобы решить проблему динамического определения того, какой объект запрашивать во время выполнения, вы можете сделать что-то вроде этого:
Sub query(Of T)(ByVal Myobject As IQueryable(Of T))
Dim i = Myobject.Select("New(customer.Number)")
End Sub
Тогда вы можете просто сделать небольшое переключение после чтения имен из базы данных, например:
Sub PassIt()
Dim name = "customer"
Select Case name
Case "customer"
query(m.Customer)
End Select
End Sub
Надеюсь, это поможет.
Заметка! Был бы лучший способ выполнить последнюю часть (метод passit), но рано утром думать об этом.
Извините, ответ в VB, я должен был сделать это в C #