【发布时间】:2009-11-26 11:39:30
【问题描述】:
使用 LINQ,如何获取表的列名? C# 3.0、3.5 框架
【问题讨论】:
-
重新标记为
linq-to-sql,如果您指的是其他类型的“LINQ”,请编辑您的问题。 -
不幸的是,这个查询在 LINQPad 中运行,那么如何在 LINQPad 中获取上下文?
标签: c# .net linq linq-to-sql
使用 LINQ,如何获取表的列名? C# 3.0、3.5 框架
【问题讨论】:
linq-to-sql,如果您指的是其他类型的“LINQ”,请编辑您的问题。
标签: c# .net linq linq-to-sql
也许为时已晚,但我通过这段代码解决了这个问题
var db = new DataContex();
var columnNames = db.Mapping.MappingSource
.GetModel(typeof(DataContex))
.GetMetaType(typeof(_tablename))
.DataMembers;
【讨论】:
GetType(DataContext) 而不是 typeof(DataContext)。
下面的代码将返回表格的所有列名
var columnnames = from t in typeof(table_name).GetProperties() select t.Name
【讨论】:
我假设您的意思是使用 LINQ to SQL,在这种情况下查看 DataContext.Mapping 属性。我就是这么用的。
如果你不是那个意思,也许你可以详细说明你想要达到的目标?
【讨论】:
我偶然发现了这个问题,正在寻找同样的东西,但在这里没有看到一个很好的答案。这就是我想出的。直接扔到 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
根据需要进行修改。
【讨论】:
我在 LinqPad 中使用了这段代码
from t in typeof(table_name).GetFields() select t.Name
【讨论】:
在您的数据上下文中使用 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 目录视图中检索更多信息(例如数据类型、最大长度)。
【讨论】:
使用反射迭代 L2S 类的属性
【讨论】:
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 结果选项卡。
【讨论】:
我使用的是 .net core 3.0,但这些解决方案都不适合我。我的解决方案是使用 Newtonsoft Json 序列化程序的蛮力方法。
var dt = this._context.Prodmats.First(); // get the first row of my table
var json = JsonConvert.SerializeObject(dt);
var tva2 = new string(json.Where(c => char.IsLetter(c) || char.IsDigit(c) || c == ':'
|| c == ',' || char.IsWhiteSpace(c) ).ToArray()) ;
var arr = tva2.Split(',');
var col = new List<string>();
foreach (var val in arr)
{
var ch = val.Split(':');
var trimCh = ch[0];
col.Add(trimCh.Trim());
}
// col
【讨论】: