我正在使用LINQPad,我想知道表的模式細節。LINQ:獲取表詳細信息
我知道,我使用SQL它:
SELECT column_name,*
FROM information_schema.columns
WHERE table_name = '{table_name}'
ORDER BY ordinal_position
我怎樣才能做到這一點使用LINQ?
我正在使用LINQPad,我想知道表的模式細節。LINQ:獲取表詳細信息
我知道,我使用SQL它:
SELECT column_name,*
FROM information_schema.columns
WHERE table_name = '{table_name}'
ORDER BY ordinal_position
我怎樣才能做到這一點使用LINQ?
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。
我得到'IEnumerable <>(0項)' –
@inquisitive_one:我猜這是由於你的表名。它必須用方括號括起來,就像你在給定的例子中看到的那樣。所以名爲'person_sites'的表格需要說''[person_sites]「'。 – StriplingWarrior
我仍然得到相同的結果。我在LINQPad中將其作爲「C#表達式」來完成。 –
MetaTable t = MyDataContext.Mapping.GetTables().Where(
i => i.TableName == "TABLENAME").SingleOrDefault();
PropertyInfo[] fields = t.RowType.InheritanceRoot.GetType().GetProperties();
「域」將包含列的名稱和類型。
我得到'無法找到名稱空間名稱的類型「MetaTable」。 –
[System.Data.Linq](http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.metatable.aspx) –
我仍然收到相同的消息。我將「System.Data.Linq.dll」添加到查詢的其他引用。我在LINQPad中使用「C#聲明」。 –
在LINQ to SQL中,您可以嘗試將這些視圖引入模型中。如果這不起作用,您可以創建一個存儲過程來檢索信息,然後LINQ to SQL將映射存儲過程並將其作爲函數執行。
我知道linq墊做它。也許你可以反思linq可執行文件? Resharper有免費的「dotPeek」。 – Crisfole
@Cpfohl:我如何做反思? –
我認爲下面的答案綽綽有餘。要真正看看源代碼,你必須從Reflector的網站下載dotPeek並在exe上運行它。 – Crisfole