2009-11-26 84 views
16

LINQを使用して、テーブルの列名を取得するにはどうすればよいですか? C#3.0、反射LINQ:テーブルの列名を取得

+0

'linq-to-sql'に変更されました。他の種類の" LINQ "を意味する場合は、質問を編集してください。 –

+0

残念ながら、このクエリはLINQPad内で実行されるので、LINQPadでコンテキストを取得するにはどうすればよいですか? –

答えて

5

であなたのL2Sクラスの3.5フレームワーク

+0

私はLINQPad(C#)を使ってプログラムを書いています。これはもちろん、テーブルの列名が必要なSQL挿入ステートメントを作成できます。 –

+5

これは少し明確にすることができます...これは多くの答えではありません。 –

+1

いくつかの使用例は素晴らしいでしょう。マッピングAPIは、最小限に抑えるためには直感的ではありません。 –

0

反復プロパティは、私はあなたがDataContext.Mapping施設で、その場合には一見、SQLにLINQを使用して意味を前提としています。それが私が使うものです。

もしあなたがそれを意味するわけではないのであれば、達成しようとしているものについて詳しく述べることができますか?

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

は、たぶんそれは私が、私は以下のコードが戻ってから働いていたすべての列名のだろうLinqPad

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

ありがとう、あなたは私に時間のボートロードを保存しました。これは、DataContext.Mappingプロパティを使用する方法を示しているので、これは受け入れられた答えより優れています。 –

+3

VB.Netでは 'typeof(DataContext)'の代わりに 'GetType(DataContext)'を使います。 – Zarepheth

2

このコードによって、この問題を解決し、遅すぎですが、テーブル

var columnnames = from t in typeof(table_name).GetProperties() select t.Name 
+0

テーブル名のバージョンが異なることに注意してください。 –

15

でこのコードを使用し

var db = new DataContex(); 
var columnNames = db.Mapping.MappingSource 
         .GetModel(typeof(DataContex)) 
         .GetMetaType(typeof(_tablename)) 
         .DataMembers; 
+2

なぜこれがupvotedされなかったか分かりません、それは最もエレガントな答えです。以下はラムダ構文と同じです:var columnnames = typeof(table_name).GetProperties()。Select(t => t.Name); – draconis

+0

列を取得するだけでなく、追加のプロパティも取得するので、これはあまり有効ではないかもしれません。結局、拡張性を考慮した部分クラスです。 – mbx

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

sp_helpはLinqPadで、MS SQLサーバ

0

にLinqPad SQLウィンドウの 'テーブル名'

オプション:

TableNames.Take(1)動作します。

これは高速です。 (理想的な世界では、行を選択しない方が良いでしょう)

TableNameの複数形です。 Take(0)を実行して、SQL resultsタブを見ることもできます。

関連する問題