C#,ado.net,Entity Framework里面的泛型问题。

以Northwind数据库为例,下面的代码是执行成功的northwindEntitiesen=newnorthwindEntities();dataGridView1.D... 以Northwind数据库为例,下面的代码是执行成功的
northwindEntities en = new northwindEntities();
dataGridView1.DataSource = en.Employees;
但是我现在需要动态地应用到各个Entity,比如说对Orders表也是一样的,因此我构造了一个泛型类
public class SearchCriterias<T> where T:EntityObject
那现在我应该如何利用这个Employee类型的参数来实现绑定呢?
//假如我调用的时候 传了一个t=Employee类型的参数
private IQueryable<T> F(T t)
{
northwindEntities en = new northwindEntities();
return //这里怎么写?
}
展开
 我来答
Jarhf
推荐于2016-03-05 · TA获得超过1862个赞
知道小有建树答主
回答量:1736
采纳率:25%
帮助的人:1033万
展开全部

en.CreateObjectSet<T>().ToList(); 

另外其实 你的实参是多余的,泛型查询类你可以这么写:

  public class EntityProvider<T> : IDisposable where T : EntityObject
    {
     public void Dispose()
        {
            if (this.entForQueryOnly != null)
            {
                this.entForQueryOnly.Dispose();
            }
        }
 // 仅查询用
        protected NorthwindEntities entForQueryOnly;
 public virtual List<T> GetList()
        {
            return this.entForQueryOnly.CreateObjectSet<T>().ToList();
        }

        public virtual List<T> GetList(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
        {
            return this.entForQueryOnly.CreateObjectSet<T>().Where(predicate).ToList();
        }
        //Add
        public virtual T Add(T entity)
        {
            using (NorthwindEntities ent = new NorthwindEntities())
            {
                try
                {
                    ent.CreateObjectSet<T>().AddObject(entity);
                    ent.SaveChanges();
                    return entity;
                }
                catch
                {
                    return default(T);
                }
            }
        }
 }
追问
var results = en.Employees.AsExpandable().Where(predicate.Compile());
这个你用过没有,Linqkit开源类库,上面那个是编译通过的。下面的会报错
var results = en.CreateObjectSet<Employee().AsExpandable().Where(predicate.Compile());
追答
//EntityProvider类中添加构造函数,刚才忘记写了

public EntityProvider()
        {
            this.entForQueryOnly = new NorthwindEntities();
        }
        
        // 为了200分,特意下了个Linqkit,这么写是没问题的(不过有点画蛇添足的赶脚)
        this.entForQueryOnly.CreateObjectSet<T>().AsExpandable().Where(predicate.Compile()).ToList();
幂而不宣
2013-07-26 · 超过14用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:37.1万
展开全部

如果你不用反射Relection,恐怕是找不到答案的.

思路应该是

  1. Type type= t.GetType();

  2. 确定Type以后再利用反射从en中找数据集

   没试过,自己试试吧.

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式