返回通用实体列表

Ohl*_*afl 2 c# generics entity-framework

public List<Customer> GetAllCustomers()
{
   List<Customer> listOfCustomers = db.Customer.ToList();
   return listOfCustomers;
}
Run Code Online (Sandbox Code Playgroud)

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

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

非常感谢您的帮助!

Dav*_*idG 8

这应该做的工作,只需使用Set<T>您的上下文的属性:

public List<T> GetEntities<T>() where T : class
{
    return db.Set<T>().ToList();
}
Run Code Online (Sandbox Code Playgroud)

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

public IQueryable<T> GetEntities<T>() where T : class
{
    return db.Set<T>();
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

List<Customer> listOfCustomers = GetEntities<Customer>();
Run Code Online (Sandbox Code Playgroud)

或者使用IQueryable<T>版本:

IQueryable<Customer> listOfCustomers = GetEntities<Customer>();
Run Code Online (Sandbox Code Playgroud)

您现在可以正确查询:

IQueryable<Customer> allCustomers = listOfCustomers;
List<Customer> onlyBobs = allCustomers
    .Where(c => c.Name = "Bob")
    .ToList();
Run Code Online (Sandbox Code Playgroud)