Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Loop Through LINQ Query Columns (Not rows)

Tags:

c#

linq

Is it possible, and if so how, to loop though the results of a LINQ query?

Something like this:

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

IEnumerable<string> 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++;
    }
}

Essentially, i want to replicate the following sort of functionality:

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

Thanks all in advance.

like image 616
CatchingMonkey Avatar asked Oct 27 '11 13:10

CatchingMonkey


Video Answer


1 Answers

If you have the option of changing your original LINQ statement to produce a data structure that allows you to do what you're looking for, I'd definitely suggest that.

If not, you'll need to use reflection to look up the properties of your anonymous type by their name, and then get the values of those properties by reflection:

    PropertyInfo[] columns = results.First().GetType().GetProperties();
    ...
            string foobar = columns[i].GetValue(row, null);
like image 117
StriplingWarrior Avatar answered Sep 21 '22 05:09

StriplingWarrior