【问题标题】:LINQ: Get Table detailsLINQ:获取表详细信息
【发布时间】:2011-10-06 03:56:07
【问题描述】:

我正在使用 LINQPad,我想知道表的架构详细信息。

我知道我是用 SQL 来做的:

SELECT column_name,* 
FROM information_schema.columns
WHERE table_name = '{table_name}'
ORDER BY ordinal_position

如何使用 LINQ 做到这一点?

【问题讨论】:

  • 我知道 linq pad 可以做到。也许您可以反思 linq 可执行文件? Resharper 有“dotPeek”,它是免费的。
  • @Cpfohl:我该如何进行反射?
  • 我认为以下答案绰绰有余。要真正查看源代码,您必须从 Reflector 的网站下载 dotPeek 并在 exe 上运行它。

标签: c# .net linq linq-to-sql


【解决方案1】:

LINQ to SQL 上下文有一个Mapping 属性,您可以将其用于此类事情。您提供的查询可能如下所示:

from t in context.Mapping.GetTables()
where t.TableName == "[table_name]"
from c in t.RowType.DataMembers
orderby c.Ordinal
select new {columnName = c.Name, columnInfo = c}

更多详情请见this answer

【讨论】:

  • 我得到 'IEnumerable(0 items)'
  • @inquisitive_one:我猜这是因为你的表名。如您在给定示例中所见,它必须用括号括起来。所以一个名为person_sites 的表需要说"[person_sites]"
  • 我仍然得到相同的结果。我在 LINQPad 中将其作为“C# 表达式”。
  • @inquisitive_one:我也是。试试Mapping.GetTables().Select(t => t.TableName) 看看实际的表名是什么。
  • 我现在看到了我的错误。谢谢。但是如何才能看到我的表所属的表目录呢?
【解决方案2】:
MetaTable t = MyDataContext.Mapping.GetTables().Where(
   i => i.TableName == "TABLENAME").SingleOrDefault();
PropertyInfo[] fields = t.RowType.InheritanceRoot.GetType().GetProperties();

'fields' 将包含列的名称和类型。

【讨论】:

  • 我得到'找不到命名空间名称“MetaTable”的类型。
  • 我仍然收到同样的信息。我将“System.Data.Linq.dll”添加到查询的附加参考中。我在 LINQPad 中使用“C# 语句”。
  • MetaTable 的完整命名空间是 System.Data.Linq.Mapping
【解决方案3】:

在 LINQ to SQL 中,您可以尝试将这些视图引入模型。如果这不起作用,您可以创建一个检索信息的存储过程,然后 LINQ to SQL 映射该存储过程并将其作为函数执行。

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 2020-10-08
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多