泛型C# - 将动态类型作为参数传递

时间:2018-03-20 09:33:00

标签: c# sql linq generics types

在尝试使用LinQ的SQL查询时遇到了一个小问题。

我收到的对象如下:

public class Entity {
   public int EntityId { get; set; }
   public string TableName { get; set; } 
}

基本上我需要运行一个类似于此的脚本..

var entityQuery = _context.Database.SqlQuery<T>("SELECT * FROM [dbo].[" + TableName + "] WHERE [Id]=" + EntityId).ToList();

现在问题是我只能从“TableName”属性知道对象“T”的类型。我如何能够实例化该类以传递它而不是T?

谢谢:)

对于那些感到困惑的人来说,这就是我正在研究的方法:

public void ModifyData(Entity item)
{
  var table = item.TableName;
  var id = item.EntityId;

  var entityQuery = _context.Database.SqlQuery<T>("SELECT * FROM [dbo].[" + table + "] WHERE [Id]=" + id ).ToList();

  //more code below;
}

有不同的方法吗?

1 个答案:

答案 0 :(得分:0)

为什么要传递tableName?在“int tableName”中也是如此?为什么不使用传入的实体类型? 好吧无论如何,你可以尝试这样的事情:

Install-Package System.Linq.Dynamic

注意:您可能需要安装:var data = _dbContext.Set(type).AsNoTracking().AsQueryable();

在您的情况下,您可以直接使用

git commit