LINQを使用して、テーブルの列名を取得するにはどうすればよいですか? C#3.0、3.5フレームワーク
LINQ to SQLを使用することを意味していると思います。その場合は、 DataContext.Mapping プロパティを確認してください。それが私が使っているものです。
それを意味しないのなら、おそらくあなたはあなたが達成しようとしていることについて詳しく説明することができますか?
多分手遅れですが、私はこのコードでこの問題を解決しました
var db = new DataContex();
var columnNames = db.Mapping.MappingSource
.GetModel(typeof(DataContex))
.GetMetaType(typeof(_tablename))
.DataMembers;
以下のコードは、テーブルのすべての列名を返すから機能します
var columnnames = from t in typeof(table_name).GetProperties() select t.Name
私は同じことを探してこの質問に出くわしました、そしてここで本当に良い答えを見ませんでした。これが私が思いついたものです。 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
必要に応じて変更します。
LinqPadでこのコードを使用しました
from t in typeof(table_name).GetFields() select t.Name
データコンテキストでExecuteQueryメソッドを使用して、次のSQLスクリプトを実行します。
var columnNames = ctx.ExecuteQuery<string>
("SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('your table name');");
これにより、指定したテーブル内のすべての列名を含むIEnumerable<string>
が得られます。
もちろん、必要に応じて、SQLServerのsys.columns
カタログビューからいつでもより多くの情報(データ型、最大長など)を取得できます。
sp_help'TableName '
MssqlサーバーへのLinqPadSQLウィンドウのオプション
var query = from x in DataBase.Table_Name
select x.Column_Name;
マップされたテーブルの列を取得することについて話している場合は、 この回答 を参照して、列属性を取得する方法を確認してください。そこから、列名、タイプなどを取得できます。
LinqPadの場合:
TableNames.Take(1)は機能します。
入力は速いです。 (理想的な世界ではありますが、行を選択しない方がよいでしょう。)
TableNameの複数形であることに注意してください。 Take(0)を実行して、[SQL結果]タブを確認することもできます。
リフレクションを使用してL2Sクラスのプロパティを反復します