views:

77

answers:

2

Hi,

I'm using linq to load a csv file, but because the csv may have any number of columns, the object that it returns will need dynamic properties, and I can't figure out how to do that.

var data = from row in csvData
       let col = row.Split(',')
       select new
              {
                  Field1 = data[0],
                  Field2 = data[1],
                  Field3 = data[2] // etc, etc
              };

If possible, I'd like to name the properties by the name given in the csv file, rather than field1, field2, etc.

Thanks!

+5  A: 

What would you do with this afterwards? If you know the names elsewhere and you're using .NET 4, you could use ExpandoObject - populate it by using it as a dictionary, and then access the property names using dynamic typing later. But if it's all dynamic (i.e. you don't know anything statically anywhere), why don't you just use Dictionary<string, string>?

Jon Skeet
A: 

You could just do is simply using arrays or even a Dictionary but if you want to do something cool with Dynamic check out Clay

http://weblogs.asp.net/bleroy/archive/2010/08/18/clay-malleable-c-dynamic-objects-part-2.aspx

Sruly