2009-11-26 212 views
16

使用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

回答

5

屬性我假設你使用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

0

迭代你L2S類與反思

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目錄視圖中檢索更多信息(例如數據類型,最大長度)。

0

如果您正在討論獲取映射表的列,請參閱this answer以瞭解如何獲取列屬性。從那裏你可以得到列名,類型等

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 

修改爲您認爲合適的。

17

也許太晚了,但是,我通過這段代碼解決了這個問題

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

2

我以前在LinqPad

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

請注意,它是表名稱的非數字化版本。 – 2014-07-04 16:47:27

15

這段代碼下面的代碼將工作從返回的所有列名錶

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

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

sp_help將 '表名'

的LinqPad SQL窗口的MS SQL Server

0

在LinqPad一個選項:

TableNames.Take(1)工作。

鍵入速度很快。 (雖然你處於理想的世界,但不要選擇任何行會更好。)

注意它是TableName的複數形式。您也可以執行Take(0)並查看SQL結果選項卡。