Linq到实体框架模型 - 如何以编程方式切换视图

时间:2009-08-17 13:28:54

标签: c# linq entity-framework

我正在使用实体框架模型来查询我的数据库并添加了一些我想要使用的视图,它们都具有相同的查询参数。而不是写一个大型的case-switch语句列表,我想知道如何通过将视图对象作为参数传递给我的main方法以编程方式执行此操作。在sql中我会这样做:

public void Tables(string TableName)
{
    using(EntityModel entity = new EntityModel()){
      string sql = "select * from " + TableName;
      etc....
}

然而,我只是看不出如何用实体框架模型做类似的事情,即

public void Tables(Type TableName)
{
    using(EntityModel entity = new EntityModel()){
      ObjectQuery<Users> oq = new ObjectQuery<Users>("EntityModel.Users", EntityModel); 
      var q = (from p in oq select p);
}

如果你知道你需要什么类型的表或视图(即用户),那很好,但你不能将类型作为参数传递,因为ObjectQuery不能接受变量,typeof()或任何不难的-coded。如果可能的话,任何人都有任何想法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Entity SQL执行此操作,但您仍需要知道查询的返回类型。如果查询总是返回相同类型的实体,那么我认为你不会传入“TableName”。那么你真正想要的是什么呢?一些标量值?毕竟,Scalars是您从SQL示例中获得的全部内容。您可以使用Entity SQL执行此操作,将实体集名称指定为字符串,然后返回标量结果。请参阅:http://msdn.microsoft.com/en-us/library/cc716751.aspx

答案 1 :(得分:0)

使用通用方法传递类型

public void Tables<TTableType>(string TableName)
{
     using (EntityModel entity = new EntityModel())
     {
            ObjectQuery<TTableType> oq = new ObjectQuery<TTableType>("EntityModel." + TableName, entity);       
            var q = (from p in oq select p);
        }
    }