我对通用列表有疑问。
假设我有一个包含三个表的数据库,User表,Order表和Item表。
在C#代码中,我想要一个名为GetList的函数来从三个表中的一个表中获取所有记录。
如果我不使用泛型方法,我必须创建3个不同的方法,看起来像GetAllUsers(),GetAllOrders()和GetAllItems()。在这3个方法中,我将编写linq来查询数据库。
我的问题是如何实现通用方法。
我想使用EF 4.1。我知道如何使用NHibrate来做到这一点。
更新
这个怎么样?我从另一篇文章中找到了它,它可以用来获得一个单独的记录
public T GetSingleEntity<T>(Expression<Func<T,bool>> expression) where T:class
{
using (PersonalLinksEntities dbContext = new PersonalLinksEntities())
{
return dbContext.CreateObjectSet<T>().SingleOrDefault(expression);
}
}
PersonalLinksEntities由EF生成,它是数据库的第一个模型。
以下是我称之为此方法的方法
public ActionResult Index()
{
var thisOne = base.GetSingleEntity<PersonalRecord>(r=>r.RecordID==1);
return View();
}
答案 0 :(得分:1)
具体实施取决于您用于访问数据的内容。 NHib,EF,L2S?这些都有一些通用的方式来访问IQueryable。
您可以公开一个方法,例如:
public IQueryable<T> GetQueryable<T>()
{
//Implementation depends on your data provider
//return dataContext.GetTable<T>();
//return session.Query<T>();
}
但您可能想要做的是遵循存储库模式,为每种类型使用不同的存储库。但是您可以使用接受类型参数且可重用的抽象基础存储库。
public abstract class RepositoryBase<T>
{
public IQueryable<T> GetQuery()
{
//Implementation determined by provider
}
}
答案 1 :(得分:0)
由于问题中没有关于你已经写过的内容的细节。如果你只想从表中获取所有记录......为什么LINQ ......?您可以在方法中使用数据集和数据适配器简单地查询数据库,并使该通用只需传递表名并返回数据集,之后您可以根据需要使用该数据集。如果我在这个案例中有任何具体的复杂性,请详细说明。
答案 2 :(得分:0)
在DbContext中已经存在您想要的方法,称为Set,例如var results = dbContext.Set();
如果您使用的是ObjectContext,那么您需要的方法是CreateObjectSet()。