2011-10-05 73 views
9

我正在使用LINQPad,我想知道表的模式細節。LINQ:獲取表詳細信息

我知道,我使用SQL它:

SELECT column_name,* 
FROM information_schema.columns 
WHERE table_name = '{table_name}' 
ORDER BY ordinal_position 

我怎樣才能做到這一點使用LINQ?

+0

我知道linq墊做它。也許你可以反思linq可執行文件? Resharper有免費的「dotPeek」。 – Crisfole

+0

@Cpfohl:我如何做反思? –

+0

我認爲下面的答案綽綽有餘。要真正看看源代碼,你必須從Reflector的網站下載dotPeek並在exe上運行它。 – Crisfole

回答

6

LINQ to SQL上下文有一個Mapping屬性,您可以使用這種事情。查詢像您,可能是這個樣子的一個:

from t in context.Mapping.GetTables() 
where t.TableName == "[table_name]" 
from c in t.RowType.DataMembers 
orderby c.Ordinal 
select new {columnName = c.Name, columnInfo = c} 

詳情請參閱this answer

+0

我得到'IEnumerable <>(0項)' –

+0

@inquisitive_one:我猜這是由於你的表名。它必須用方括號括起來,就像你在給定的例子中看到的那樣。所以名爲'person_sites'的表格需要說''[person_sites]「'。 – StriplingWarrior

+0

我仍然得到相同的結果。我在LINQPad中將其作爲「C#表達式」來完成。 –

4
MetaTable t = MyDataContext.Mapping.GetTables().Where(
    i => i.TableName == "TABLENAME").SingleOrDefault(); 
PropertyInfo[] fields = t.RowType.InheritanceRoot.GetType().GetProperties(); 

「域」將包含列的名稱和類型。

+0

我得到'無法找到名稱空間名稱的類型「MetaTable」。 –

+0

[System.Data.Linq](http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.metatable.aspx) –

+0

我仍然收到相同的消息。我將「System.Data.Linq.dll」添加到查詢的其他引用。我在LINQPad中使用「C#聲明」。 –

0

在LINQ to SQL中,您可以嘗試將這些視圖引入模型中。如果這不起作用,您可以創建一個存儲過程來檢索信息,然後LINQ to SQL將映射存儲過程並將其作爲函數執行。