2

かなり一般的な方法で、1 つの行の内容を表示したいと考えています。この手法をいくつかの異なるテーブルに対して使用します。出力は次のようなプレーン テキスト (RichTextBox 内) になります: TABLE_NAME PROPNUM: xxxxxxx SALE DATE: mm/dd/yyyy ... LAST COL: lastvalue

(a) 各テーブルの列名はわかっていますが、ハードコーディングしたくありません。
(b) テーブル構造が変更された場合でも機能するように十分な柔軟性を持たせたい。

列名を反復処理する方法はわかりましたが、対応するデータ値を参照する方法はわかりません!

var arQuery = (from acp in ... select acp).FirstOrDefault(); // one & only one match
foreach (var colName in arQuery.GetType().GetProperties())
...

colName が各列名を順番に取得するようになりました。その列の対応する値を arQuery で参照するにはどうすればよいですか? (注:これを逆にして、各列の値を反復処理することは完全にうれしいです...各値の列名を取得する方法を知っていれば...)(はい、私はちょっと新しいですC# と LINQ ... 親切にお願いします!)

ありがとう!

4

1 に答える 1

3

これは次のように可能である必要があります。

//long way
string sline=arQuery.GetType().Name + " ";
foreach (PropertyInfo info in arQuery.GetType().GetProperties())
{
   if (info.CanRead)
   {
      sline += info.Name+": "+info.GetValue(arQuery, null) + " ";
   }
} 

//using LINQ without the for loop
sline += string.Join(" ", arQuery.GetType().GetProperties().Where(i=>i.CanRead).Select(i=> ""+i.Name+": "+i.GetValue(arQuery, null)));

タイプミスがあまりないことを願っています;)

于 2012-05-24T23:15:14.460 に答える