c# - 通用类型 T 作为变量名

标签 c# entity-framework generics

我正在使用 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/

相关文章:

generics - Kotlin:使泛型类型的子类继承函数并限制可用的输出类型

c# - 通过将 4 个较小的数字基元类型编码为 long (Int64) 来生成唯一键

c# - Asp.Net Core SPA 与分离解决方案(Asp.Net Core WebApi + Web 应用程序)

c# - C#多线程的速度测试

entity-framework - EF Code First - 先删除再创建数据库

java - 创建用于验证的通用枚举包装器

c# - 无法访问空单元格 EPPlus

entity-framework - 如何将 Crystal 报表绑定(bind)到 Entity Framework ?

c# - 检测到自引用循环 - 从 WebApi 获取数据到浏览器

java - 使用具有多个边界的泛型时,编译器不会打印编译时错误