使用LINQ to Entities,我有以下代码:
public Foo GetFooByID(int id)
{
return _db.Foo.First(m => m.ID == id);
}
public Bar GetBarByID(int id)
{
return _db.Bar.First(m => m.ID == id);
}
有没有办法使用泛型来重构这个?
答案 0 :(得分:2)
您可以执行类似LINQ to SQL DataContext.GetTable方法的操作:
public T GetById<T>(int id)
{
return _db.GetTable<T>().First(m => m.ID = id);
}
然后你会这样称呼它:
GetById<Foo>(10);
GetById<Bar>(10);
答案 1 :(得分:0)
您首先需要在Foo
上抽象对属性Bar
和_db
的访问权限。然后通用部分变得非常简单。
public T GetByID<T>(int id)
{
return _db.GetCollection<T>().First<T>(m => m.ID == id);
}
如果编译器抱怨,您可能需要将T约束为具有ID属性的类型。
public T GetByID<T>(int id) where T : IHaveID
{
}