返回通用实体列表

时间:2015-02-17 14:10:11

标签: c# entity-framework generics

public List<Customer> GetAllCustomers()
{
   List<Customer> listOfCustomers = db.Customer.ToList();
   return listOfCustomers;
}

我有一个包含三个表(实体)的数据库:Customer,Event和Venue。正如您所看到的,我将返回一个包含Customers的列表,但我想知道是否有一种方法可以将列表中的实体作为更通用的方式返回。这样就不会强迫我为所有实体设置单独的get方法。

我在网上搜索过但发现在使用lamdba语法时没有任何适用的内容。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:8)

这应该可以完成工作,只需使用上下文的Set<T>属性:

public List<T> GetEntities<T>() where T : class
{
    return db.Set<T>().ToList();
}

但是,您可能希望保持此函数返回IQueryable<T>而不是List<T>,以便您可以继续从延迟执行中受益。所以方法变成:

public IQueryable<T> GetEntities<T>() where T : class
{
    return db.Set<T>();
}

并称之为:

List<Customer> listOfCustomers = GetEntities<Customer>();

或使用IQueryable<T>版本:

IQueryable<Customer> listOfCustomers = GetEntities<Customer>();

您现在可以正确查询:

IQueryable<Customer> allCustomers = listOfCustomers;
List<Customer> onlyBobs = allCustomers
    .Where(c => c.Name = "Bob")
    .ToList();