2011-10-05 13 views
9

Używam LINQPad i chciałbym poznać szczegóły schematu tabeli.LINQ: Pobierz szczegóły tabeli

wiem, że mogę to zrobić za pomocą SQL:

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

Jak mogę to zrobić przy użyciu LINQ?

+0

Wiem, że podkładka linq to robi. Być może mógłbyś zastanowić się nad plikiem wykonywalnym linq? Resharper ma "dotPeek", który jest bezpłatny. – Crisfole

+0

@Cpfohl: Jak zrobić odbicie? –

+0

Myślę, że poniższe odpowiedzi są więcej niż wystarczające. Aby rzeczywiście spojrzeć na źródło, musisz pobrać dotPeek ze strony internetowej Reflectora i uruchomić go na serwerze exe. – Crisfole

Odpowiedz

6

LINQ do kontekstów SQL mają właściwość Mapping, której można użyć do tego typu rzeczy. Zapytanie jak ten podany może wyglądać tak:

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} 

Zobacz this answer więcej szczegółów.

+0

Otrzymuję 'IEnumerable <> (0 items)' –

+0

@ insulina_na: Zgaduję, że jest to spowodowane nazwą twojego stołu. Musi być otoczony nawiasami, jak widać w podanym przykładzie. Tak więc tabela o nazwie 'person_sites' będzie musiała powiedzieć' "[person_sites]" '. – StriplingWarrior

+0

Wciąż otrzymuję ten sam wynik. Robię to jako "Wyrażenie C#" w LINQPad. –

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

"pola" będą zawierać nazwy i typy kolumn.

+0

Otrzymałem komunikat: "Nie można znaleźć typu nazwy obszaru" MetaTabela ". –

+0

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

+0

Ciągle otrzymuję tę samą wiadomość. Dodałem "System.Data.Linq.dll" do dodatkowych odnośników zapytania. Używam "Wyciągów C#" w LINQPad. –

0

W LINQ do SQL można spróbować wprowadzić te widoki do modelu. Jeśli to nie zadziała, możesz utworzyć procedurę składowaną, która pobierze informacje, a następnie LINQ do SQL odwzoruje procedurę składowaną i wykonasz ją jako funkcję.

Powiązane problemy