使用LINQ,如何获取表的列名? C#3.0,3.5框架
答案 0 :(得分:18)
也许为时已晚,但我通过此代码解决了这个问题
var db = new DataContex();
var columnNames = db.Mapping.MappingSource
.GetModel(typeof(DataContex))
.GetMetaType(typeof(_tablename))
.DataMembers;
答案 1 :(得分:15)
以下代码将从返回表的所有列名称
开始工作var columnnames = from t in typeof(table_name).GetProperties() select t.Name
答案 2 :(得分:6)
我偶然发现这个问题寻找同样的事情,并没有在这里看到一个非常好的答案。这就是我提出的。只需在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
根据需要进行修改。
答案 3 :(得分:5)
我假设您的意思是使用LINQ to SQL,在这种情况下请查看DataContext.Mapping属性。这就是我使用的。
如果你不是那个意思,也许你可以详细说明你想要实现的目标?
答案 4 :(得分:3)
我在LinqPad中使用了这段代码
from t in typeof(table_name).GetFields() select t.Name
答案 5 :(得分:2)
在数据上下文中使用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
目录视图中检索更多信息(例如数据类型,最大长度)。
答案 6 :(得分:0)
使用反射
迭代L2S类的属性答案 7 :(得分:0)
如果您正在讨论获取映射表的列,请参阅this answer以了解如何获取列属性。从那里你可以得到列名,类型等。
答案 8 :(得分:0)
var query = from x in DataBase.Table_Name
select x.Column_Name;
答案 9 :(得分:0)
sp_help'TableName'
LinqPad SQL窗口到ms sql server的选项
答案 10 :(得分:0)
在LinqPad中:
TableNames.Take(1)有效。
输入速度很快。 (虽然你处于理想的世界,不选择任何行会更好。)
请注意,它是TableName的复数形式。您也可以执行Take(0)并查看SQL结果选项卡。
答案 11 :(得分:-1)
我使用的是 .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 <= 有列列表