LINQ:获取表列名称

问题描述:

使用LINQ,如何获取表的列名称? C#3.0,3.5框架LINQ:获取表列名称

+0

重新标记为'linq-to-sql',如果您的意思是某种其他类型的“LINQ”,请编辑您的问题。 – 2009-11-26 12:09:50

+0

不幸的是,这个查询在LINQPad内部运行,所以如何在LINQPad中获取上下文? – 2009-12-19 19:37:38

属性我假设你使用LINQ to SQL,在这种情况下看DataContext.Mapping财产的意思。这就是我使用的。

如果你不是这个意思,或许你可以详细说明你想达到的目标吗?

+0

我想写一个使用LINQPad(C#)的程序,可以为此构建SQL插入语句,因为我需要这些表的列名。 – 2009-11-26 12:01:11

+5

这可以澄清一点...这不是一个答案。 – 2011-02-25 16:02:20

+1

一些示例用法会很好。 Mapping API有点不直观,至少可以说... – 2013-01-30 18:09:16

迭代你L2S类与反思

使用你的数据上下文executeQuery方法和执行该SQL脚本:

var columnNames = ctx.ExecuteQuery<string> 
    ("SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('your table name');"); 

这给你与你指定在该表中的所有列名的IEnumerable<string>

当然,如果您需要并且需要,您可以随时从SQL Server的sys.columns目录视图中检索更多信息(例如数据类型,最大长度)。

如果您正在讨论获取映射表的列,请参阅this answer以了解如何获取列属性。从那里你可以得到列名,类型等

我偶然发现了这个问题寻找同样的事情,并没有看到一个非常好的答案。这是我想出的。只需将它放入C#表达式模式下的LINQPad即可。

from t in typeof(UserQuery).GetProperties() 
where t.Name == "Customers" 
from c in t.GetValue(this,null).GetType().GetGenericArguments()[0].GetFields() 
select c.Name 

修改为您认为合适的。

也许太晚了,但是,我通过这段代码解决了这个问题

var db = new DataContex(); 
var columnNames = db.Mapping.MappingSource 
         .GetModel(typeof(DataContex)) 
         .GetMetaType(typeof(_tablename)) 
         .DataMembers; 
+1

谢谢,你刚刚救了我一船的时间。这比接受的答案要好,因为这显示了如何使用DataContext.Mapping属性。 – 2013-01-30 18:09:35

+3

对于VB.Net,使用'GetType(DataContext)'而不是'typeof(DataContext)'。 – Zarepheth 2013-06-15 22:12:25

我以前在LinqPad

from t in typeof(table_name).GetFields() select t.Name 
+0

请注意,它是表名称的非数字化版本。 – 2014-07-04 16:47:27

这段代码下面的代码将工作从返回的所有列名表

var columnnames = from t in typeof(table_name).GetProperties() select t.Name 
+2

不知道为什么这不是upvoted,这是最优雅的答案。这里是lambda语法的等价物:var columnnames = typeof(table_name).GetProperties()。Select(t => t.Name); – draconis 2013-01-28 13:40:56

+0

也许这不是upvoted,因为你不仅得到列,而且还有其他属性。毕竟,它通常是一个可扩展的部分类。 – mbx 2014-02-03 08:00:36

  var query = from x in DataBase.Table_Name 
         select x.Column_Name; 

sp_help将 '表名'

的LinqPad SQL窗口的MS SQL Server

在LinqPad一个选项:

TableNames.Take(1)工作。

键入速度很快。 (虽然你处于理想的世界,但不要选择任何行会更好。)

注意它是TableName的复数形式。您也可以执行Take(0)并查看SQL结果选项卡。