LINQ to Entities动态DbSet

时间:2012-11-23 17:31:09

标签: entity-framework linq-to-entities

是否可以在运行时指定LINQ to Entities查询的DbSet?

例如,如果我有许多不同的DbSet具有公共属性,例如“IsExpired”,我可以将DbSet传递给查询吗?

所以,

Dim query = From o In db.Products Where o.IsExpired = True

看起来像,

Dim myDynamicName As String
myDynamicName = "Products"

Dim query = From o In db("myDynamicName") Where o.IsExpired = True

1 个答案:

答案 0 :(得分:1)

使用流利语法时,无法实现此目的的原因更为明白:

Dim query = db("myDynamicName").Where(Function(o) o.IsExpired)

该功能是

Function Func(Of In T, Out bool)

并且T的类型来自它之前的IQueryable Of T。 (这是可能的,因为Where是一个扩展方法,因此IQueryable是它的第一个输入参数)。因此,编译器知道o.IsExpired是一个有效的表达式。

这意味着db("myDynamicName")必须是特定类型的,它不是,或者您必须为Where方法提供类型。但这正是你试图规避的事情。