LINQ:获取表列名称

时间:2009-11-26 11:39:30

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

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

12 个答案:

答案 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 <= 有列列表