C# 正在将System.Type传递给泛型类型

C# 正在将System.Type传递给泛型类型,c#,asp.net,generic-type-argument,system.type,C#,Asp.net,Generic Type Argument,System.type,我的问题是,这有一个API控制器,并创建一个方法从X DbSet属性删除数据,但没有相同的通用参数。我的结果是以某种方式将System.Type传递给泛型参数。我的问题是如何做到这一点 var table = TableInfo.GetValue(_context) as DbSet<[here i need pass it]>; 我需要做点什么,就像我知道这行不通一样 var table = TableInfo.GetValue(_context) as DbSe

我的问题是,这有一个API控制器,并创建一个方法从X DbSet属性删除数据,但没有相同的通用参数。我的结果是以某种方式将System.Type传递给泛型参数。我的问题是如何做到这一点

    var table = TableInfo.GetValue(_context) as DbSet<[here i need pass it]>;
我需要做点什么,就像我知道这行不通一样

    var table = TableInfo.GetValue(_context) as DbSet<TableInfo.GetType>;
我的完整代码

    [HttpDelete("{name}/{id}")]
    [Route("api/Delete")]
    public IActionResult Delete(string name = "Items", int id = 2)
    {
        PropertyInfo TableInfo = GetValueByName(name);
        if (TableInfo == null)
            return NotFound("Haaaah");

        var table = TableInfo.GetValue(_context) as DbSet<[here i need pass it]>;
        if (table == null)
            return BadRequest();

        var prop = table.SingleOrDefault(p => p.Id == id);
        if (prop == null)
            return NotFound(prop);

        table.Remove(prop);
        _context.SaveChanges();
        return Ok();
    }

    public PropertyInfo GetValueByName(string name)
    {
        Type t = _context.GetType();
        List<PropertyInfo> list = new List<PropertyInfo>(t.GetProperties());
        foreach(PropertyInfo m in list)
        {
            if (m.Name == name)
                return m;
        }
        return null;
    }
最后,我对我的英语感到抱歉。 感谢所有的回答:

var table=TableInfo.GetValue\u作为DbSet的上下文

你不能这样做,你没有关于你需要什么类型的编译时信息,你希望如何在代码运行之前利用它

如果您确实想要表的编译时类型信息,您要么在编译时知道泛型类型,要么考虑到所有潜在的泛型类型,覆盖所有可能的执行路径,您的方法必须处理可怕的类型,不要这样做

使用接口也不起作用。假设的身份和作为DbSet的按行转换表将永远不起作用,因为:

类型差异只允许在接口和委托中使用,DbSet不是接口。 即使使用IDbSet,此接口的强度不变,因此以下操作将始终失败:

class User: IIdEntity { ... }
object o = someDbEntityOfUser;
var db = o as IDbSet<IIdEntity> //will always be null.
当前设置的最佳选项有:

继续使用反射;使用它检查实体的Id属性。 使用dynamic,让运行时简单地解析Id调用。
您希望如何从只有在运行时才知道的东西中获取静态类型信息?我看不出什么地方依赖于泛型类型,所以为什么需要将其转换为该类型?也许你可以在你的数据库集上实现一个接口,该接口公开你想要的属性,而不管T是什么,并将表转换为那样。我需要它,因为我需要获取id,如果我不转换它,我就无法获取id。我可以尝试动态,但它无法工作,因为我尝试的接口可能重复,但它总是返回null,因为这样。谢谢德克罗斯