【问题标题】:How I can get table name using EntityFramework如何使用 EntityFramework 获取表名
【发布时间】:2018-02-07 07:47:20
【问题描述】:

我有一个 SQL 查询,我想使用 EntityFramework 和 Linq 调用这个查询。我怎样才能做到这一点?

我想获取包含特定列名的表名:

SELECT    DISTINCT t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%CustomField%'
ORDER BY    TableName

【问题讨论】:

  • 您可以通过context.Database.SqlQuery执行上述查询
  • 这个问题没有意义......你需要阅读实体框架,
  • 这看起来像XY problem。您应该告诉您要达到的目标,以便我们判断查找表名是否合适。 并且标记你所在的EF版本。
  • 您的 DbContext 隐藏了数据库中表和列的实际名称。这使得它可以与具有相似结构但不同标识符的数据库一起使用。如果您的 DbContext 的用户需要知道表的名称,这是一个设计缺陷。需要这样做的功能应该是添加到派生的 DbContext 中的功能。

标签: c# sql entity-framework linq


【解决方案1】:

我不知道你为什么要在实体中搜索这样的表。

Msdn 满是exemple.
它的总和是:返回ObjectQuery<string>的参数化查询。

using (myEntities myContext = new myEntities())
{   
    // Create a query string
    string myQuery = @"SELECT    DISTINCT t.name AS 'TableName' "+
                        "FROM        sys.columns c "+
                        "JOIN        sys.tables  t   ON c.object_id = t.object_id "+
                        "WHERE       c.name LIKE '%@CustomField%' "+
                        "ORDER BY    TableName"; 

    // Create a query
    //If you return a primitive type you can use ObjectQuery<string>
    ObjectQuery<DbDataRecord> tableQuery = new ObjectQuery<DbDataRecord>(myQuery, myContext);

    // Add parameters.
    tableQuery.Parameters.Add(new ObjectParameter("CustomField", "FOOBAR"));

    // Go through the Result 
    foreach (DbDataRecord rec in tableQuery)
    {
        Console.WriteLine("TableName\t [{0}]", rec[0]);
    }
}

【讨论】:

    【解决方案2】:
        string Query = "SELECT    DISTINCT t.name AS 'TableName' "+
                                "FROM        sys.columns c "+
                                "JOIN        sys.tables  t   ON c.object_id = t.object_id "+
                                "WHERE       c.name LIKE '%@table%' "+
                                "ORDER BY    TableName"
    
        vr db = new DB();     
        string table = "YourTableName";     
        var result = db.Database.SqlQuery<string>(Query, new SqlParameter("@table", table)).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多