我正在使用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