我正在使用 EntityFramework,我需要一些方法来同步传入的实体列表与数据库(覆盖记录描述或将它们标记为过时):
public void Synchronize<T>(List<T> entityList)
{
//do something
}
首先,我需要从相应的表中获取所有数据并获取两个列表之间的差异(一个不可更改的是条目的 GUID)。 例如,如果传入的 entityList 的类型是 User,那么我需要从“User”表等获取所有数据。
它不起作用:
var query = from entity in typeof(T)
select entity;
当然我也可以用老办法:
switch (typeof(T).Name)
{
case "User":
var query = from user in User
select user;
//Sync with User table
break;
case "Project":
var query = from project in Project
select project ;
//Sync with Project table
break;
}
但也许有一种优雅的方式来处理泛型?因为我有很多表要同步。谢谢!
最佳答案
如果您有权访问 DbContext你可以使用方法 Set<T>
去做。
var query = from entity in context.Set<T>() select entity;
但要使其在您的上下文中工作,您必须至少对类型 T 施加约束,并且实体需要共享一个类型或接口(interface)。否则您无法构建查询,因为 T 可以是任何东西 ( object
)。
关于c# - 通用类型 T 作为变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28106974/