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 //这里怎么写?
} 展开
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 //这里怎么写?
} 展开
展开全部
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();
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询