var query = context.User.where(o=>o.uid==id);
如何写成一个方法传入表名(如User)与where,然后返回 query或者返回objectset<T> ,(如T 为User)

解决方案 »

  1.   

    可以的Dynamic LINQ
    http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
      

  2.   


     IQueryable<T> objectset<T>(Expression<Func<T, bool>> expr)
                where T : class
            {
                return context.GetTable<T>().Where(expr);
            }
      

  3.   


    我用的是EDMX,
    NorthwindEntities context = new NorthwindEntities ()
    没有GetTable
      

  4.   


    我不想这样调用
    objectset<User>
    要这样调用
    getObjectset("User")可能getObjectset方法中调用objectset<T>
    但这个T能根据传入的"User"得到即可能像这样
    objectset<TransformStrToT("User")>
    问题目是TransformStrToT("User")如何实现
      

  5.   


                return context.CreateObjectSet<T>().Where(expr);
      

  6.   

    那应该怎么调用呢?如果想这样调用行吗getObjectSet("User")public static void getObjectSet(string tableName)
    {
        var query = objectset<T>???这个T怎样用tableName得到
    }
      

  7.   

    要用传入参数的方式来调用泛型方法,我能想到的就只有用反射来执行。没有用过EF,不过我在Linq To SQL上已经实现了,我想原理应该是差不多的。
      

  8.   

    我这种情况不需要用强类型。只为了得到QUERY。反射应该如何写呢
      

  9.   

    得到的Query也不是强类型的,这也无所谓?
    返回的是一个IQueryable而不是IQueryable<T>
      

  10.   

    要得到IQueryable<T>,没办法吗
      

  11.   

    当然了,你要得到IQueryable<T>,那你就必须要在编译时就指定T,而你却要在运行时得到T,那怎么可能呢?泛型不是这么用的