LINQ:获取表列名称
属性我假设你使用LINQ to SQL,在这种情况下看DataContext.Mapping财产的意思。这就是我使用的。
如果你不是这个意思,或许你可以详细说明你想达到的目标吗?
我想写一个使用LINQPad(C#)的程序,可以为此构建SQL插入语句,因为我需要这些表的列名。 – 2009-11-26 12:01:11
这可以澄清一点...这不是一个答案。 – 2011-02-25 16:02:20
一些示例用法会很好。 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
目录视图中检索更多信息(例如数据类型,最大长度)。
我偶然发现了这个问题寻找同样的事情,并没有看到一个非常好的答案。这是我想出的。只需将它放入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;
谢谢,你刚刚救了我一船的时间。这比接受的答案要好,因为这显示了如何使用DataContext.Mapping属性。 – 2013-01-30 18:09:35
对于VB.Net,使用'GetType(DataContext)'而不是'typeof(DataContext)'。 – Zarepheth 2013-06-15 22:12:25
我以前在LinqPad
from t in typeof(table_name).GetFields() select t.Name
请注意,它是表名称的非数字化版本。 – 2014-07-04 16:47:27
这段代码下面的代码将工作从返回的所有列名表
var columnnames = from t in typeof(table_name).GetProperties() select t.Name
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结果选项卡。
重新标记为'linq-to-sql',如果您的意思是某种其他类型的“LINQ”,请编辑您的问题。 – 2009-11-26 12:09:50
不幸的是,这个查询在LINQPad内部运行,所以如何在LINQPad中获取上下文? – 2009-12-19 19:37:38