我不确定这是否正是您想要的,但 Scott Gu 在他的博客上有一篇关于使用动态 LINQ 的帖子。http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
它可能无法满足您所需的所有需求,但可能会为您提供一些帮助。
编辑。我只是看了一下 Scott Gu 的一些示例代码,发现它可以完成您需要的选择部分。示例(这是斯科特代码):
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# 中完成