ループLINQクエリ列(行ではありません)

LINQクエリの結果をループする方法はありますか?

このようなもの:

var results= from a in dt.AsEnumerable()
                    where a.Field("id") == i 
                    select new 
                    {
                       id= a.Field("id"),
                       a= a.Field("a"),
                       b = a.Field("b")
                    };

IEnumerable colNames = results.First().GetType().GetProperties()
                                                        .Select(p => p.Name);

string[] columns = colNames.ToArray();

int i = 0;
foreach (var row in results)
{
    for (int i = 0; i < columns.Count(); i++)
    {
        string foobar = (string)row[columns[i]];
        i++;
    }
}

基本的に、私は次のような機能を複製したい:

DataRow dr = new DataRow();
string foobar = dr[columns[i];

すべてありがとうございます。

5
多分この答えはあなたを助けるでしょう。 stackoverflow.com/質問/ 1882935 /&hellip;
追加された 著者 Ivan Crojach Karačić,
あなたはキャストしなければならないので、 `string foobar =(string)dr [columns [i];
追加された 著者 xanatos,
@キント、良い点、よく作られた。
追加された 著者 CatchingMonkey,

2 答え

元のLINQステートメントを変更して、探していることを実行できるデータ構造を作成するオプションがある場合は、間違いなくそのことをお勧めします。

そうでない場合は、リフレクションを使用して名前で匿名タイプのプロパティを検索し、それらのプロパティの値をリフレクションで取得する必要があります。

    PropertyInfo[] columns = results.First().GetType().GetProperties();
    ...
            string foobar = columns[i].GetValue(row, null);
4
追加された
@CatchingMonkey:私の更新を見る
追加された 著者 StriplingWarrior,
私は本当にオプションを持っていないhavent。しかし、私はプロパティを取得するために少しの反射を使用して、私はちょうど今それらと何をすべきか分からない!
追加された 著者 CatchingMonkey,
Action processColumName = (cname) => 
                           { 
                             //do anything you want with a column name
                              string foo = (string) Row[cname]; 
                           };

results.First()
        .GetType()
        .GetProperties()
        .Select(p => p.Name)
        .ToList().ForEach(processColumName);
3
追加された