none
EF4.1 的问题 大牛们进来看看 RRS feed

  • 问题

  • BaseDbContext.cs

     public class SooICDbContext<T> : DbContext where T : class, IEntity
    
     {
    
      public SooICDbContext() : base(ConfigurationManager.ConnectionStrings["conn"].ConnectionString) { }
    
      public DbSet<T> Context { get; set; }
    
    
    
      public string TableName { get; set; }
    
      protected override void OnModelCreating(DbModelBuilder modelBuilder)
    
      {
    
       modelBuilder.Entity<T>().ToTable(TableName);
    
      }
    
     }
    
    


    BaseBLL.cs

      /// <summary>
    
      /// 获取单条数据,可以指定需要的列
    
      /// </summary>
    
      /// <typeparam name="T"></typeparam>
    
      /// <param name="columnsClip"></param>
    
      /// <param name="whereClip"></param>
    
      /// <returns></returns>
    
      public T Get<T>(Func<T, int, T> columnsClip, Expression<Func<T, bool>> whereClip, Expression<Func<T, bool>> orderByClip) where T : class, IEntity
    
      {
    
       using (SooICDbContext<T> context = new SooICDbContext<T>())
    
       {
    
        context.TableName = TableName;
    
        return (context.Context.Where(whereClip).OrderBy(orderByClip).Select(columnsClip)).First();
    
       }
    
      }
    
    
    
      /// <summary>
    
      /// 获取多条数据,不分页
    
      /// </summary>
    
      /// <typeparam name="T"></typeparam>
    
      /// <param name="whereClip"></param>
    
      /// <param name="orderByClip"></param>
    
      /// <returns></returns>
    
      public List<T> GetList<T>(int nTop, Func<T, T> columnsClip, Expression<Func<T, bool>> whereClip, string orderByClip, string orderByType) where T : class, IEntity
    
      {
    
    
    
       using (SooICDbContext<T> context = new SooICDbContext<T>())
    
       {
    
        context.TableName = TableName;
    
    
    
        //ParameterExpression param = Expression.Parameter(typeof(T), "it");
    
        //Expression body = param;
    
        //PropertyInfo sortProperty = typeof(T).GetProperty(orderByClip, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
    
        //if (sortProperty == null)
    
        // throw new Exception("对像上不存在" + sortProperty + "的字段");
    
        //body = Expression.MakeMemberAccess(body, sortProperty);
    
        //LambdaExpression keySelectorLambda = Expression.Lambda(body, param);
    
        //string queryMethod = orderByType == "DESC" ? "OrderByDescending" : "OrderBy";
    
        //query = query.Provider.CreateQuery<T>(Expression.Call(typeof(Queryable), queryMethod,
    
        //             new Type[] { typeof(T), body.Type },
    
        //             query.Expression,
    
        //             Expression.Quote(keySelectorLambda)));
    
        return (context.Context.Where(whereClip).Select(columnsClip).Take(nTop)).ToList();
    
       }
    
      }
    
    

    现在出现一个问题  如果直接在里面写(context.Context.Where(a=>a.Model.StartsWith("aa")).Take(100)).ToList();  这样生成的SQL  就是纯SQL语句

    如果外部调用就变成存储过程了   

    还有  这个GetList<T>()这个方法现在都不知道怎么写了   
    Func<T, T> columnsClip我需要实现指定列查询  貌似没效

    Func<Stock, Stock> columnsClip = p => new Stock() { Model = p.Model, Manufacturer = p.Manufacturer, StockID = p.StockID, Lot = p.Lot, Packaging = p.Packaging };

    , Expression<Func<T, bool>> whereClip  这个是where语句

    还有不饿来orderClip  是写成这样的Expression<Func<T,Object>> orderByClip    但是不知道怎么总报  不能将system。nullable转换成object

     

    这个只是我自己想实现的东西   不知道可否有这必要   大家提提意见

    大牛们  给个解决方案      如果行的话  可以发一个实例代码到我邮箱levonlee@163.com   在此谢过了

     


    2011年7月8日 19:16

答案

  • 请问这种问题  是太深奥了  还是太简单啦

     

        放1天了竟然每一个人回复     2天发2问题   一个都没得回复   

    • 已标记为答案 LevonLee 2011年7月12日 15:35
    2011年7月10日 3:43

全部回复

  • 请问这种问题  是太深奥了  还是太简单啦

     

        放1天了竟然每一个人回复     2天发2问题   一个都没得回复   

    • 已标记为答案 LevonLee 2011年7月12日 15:35
    2011年7月10日 3:43
  • 请问这种问题  是太深奥了  还是太简单啦

     

        放1天了竟然每一个人回复     2天发2问题   一个都没得回复   


    对这鬼论坛彻底失望  就是不知道  至少给点意见嘛                版主   是这几天都出差了   还是?   这一个问题  摆这4天了   竟然每一个人回复      难道你们都是只解答那一些初级问题?
    2011年7月12日 15:35
  • You can also use for dynamic sorting custom method such as next:

    public static Func<T, string> GetField<T>(string field)
    {
    PropertyInfo propertyInfo = typeof(T).GetProperty(field);
    return obj => Convert.ToString(propertyInfo.GetValue(obj, null));
    }

    Then use common OrderBy method in queries:

    context.Products.OrderBy(GetField<Product>(“Title”));

     

    来源:http://www.codewrecks.com/blog/index.php/2009/03/21/entity-framework-dynamic-sorting-and-pagination/

    2011年7月22日 10:28