代码之家  ›  专栏  ›  技术社区  ›  DavidA

泛型和数据库访问

  •  0
  • DavidA  · 技术社区  · 16 年前

     public void getServiceDevelopmentPlan(Expression<Func<tblServiceDevelopmentPlan, bool>> filter, Action<List<tblServiceDevelopmentPlan>> callback)
            {
                var query = from employerSector in sdContext.tblServiceDevelopmentPlan.Where(filter)
                            select employerSector;
    
    
                var DSQuery = (DataServiceQuery<tblServiceDevelopmentPlan>)query;
                DSQuery.BeginExecute(result =>
                {
                    callback(DSQuery.EndExecute(result).ToList<tblServiceDevelopmentPlan>());
    
                }, null);
    
        }
    

    public delegate Action<List<Table>> DBAccess<Table>(Expression<Func<Table, bool>> filter);
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   DavidA    16 年前

    如果你正在使用Linq to Ado。NET数据服务或WCF数据服务,您的模型将为您构建大量类型。一般来说,虽然你会选择和过滤。你需要以下内容,那么你所有的方法都只是锦上添花:

    查询类型1-一个筛选器,返回列表:

    public  void makeQuery<T>(string entity, Expression<Func<T, bool>> filter, Action<List<T>> callback)
        {
            IQueryable<T> query = plussContext.CreateQuery<T>(entity).Where(filter);
    
            var DSQuery = (DataServiceQuery<T>)query;
            DSQuery.BeginExecute(result =>
            {
                callback(DSQuery.EndExecute(result).ToList<T>());
            }, null);
    
        }
    

    查询类型2-一个筛选器,返回单个实体:

    public void makeQuery(字符串实体、表达式>过滤器、操作回调)

            IQueryable<T> query = plussContext.CreateQuery<T>(entity).Where(filter);
            var DSQuery = (DataServiceQuery<T>)query;
            DSQuery.BeginExecute(result =>
            {
                callback(DSQuery.EndExecute(result).First<T>());
            }, null);
    
        }
    

    你需要做的就是重载这些过滤器,并将过滤器替换为简单的过滤器阵列

    Expression<Func<T, bool>>[] filter
    

    对于单次和列表返回,重复此操作。

    GenericQuery.Instance.Create().makeQuery<tblAgencyBranches>("tblAgencyBranches", f => f.tblAgencies.agencyID == _agency.agencyID, res => { AgenciesBranch.ItemsSource = res; });
    

    这可能看起来很复杂,但它隐藏了很多异步魔法,在某些情况下可以直接从按钮处理程序调用。与其说这是一个三层系统,不如说它节省了大量时间。