views:

54

answers:

2

hi ,

i need to insert a record with linq

i have a namevaluecollection with the data from a form post.. so started in the name=value&name2=value2 etc.. type format

thing is i need to inset all these values into the table, but of course the table fields are typed, and i need to type up the data before inserting it

i could of course explicitly do

linqtableobj.columnproperty = convert.toWhatever(value);

but i have many columns in the table, and the data coming back from the form, doesnt always contain all fields in the table

thought i could iterate over the linq objects columns, getting their datatype - to use to convert the appropriate value from the form data fine all good, but then im still stuck with doing

linqtableobj.columnproterty = converted value

...if there is one for every column in the table

foreach(col in newlinqrowobj)
{
    newlinqobj[col] = convert.changetype(namevaluecollection[col.name],col.datatype)
}

clearly i cant do that, but anything like that possible.. or

is it possible to loop around the columns for the new 'record' setting the values as i go.. and i guess grabbing the types at that point to do the conversion

stumped i am

thanks nat

A: 

If you have some data type with a hundred different properties, and you want to copy those into a completely different data type with a hundred different properties, then somehow somewhere in your code you are going to have to define a hundred different "mapping" instructions. It doesn't matter what framework you are using, or whether the "mapping" instructions are lines of C# code, XML elements, lambda functions, proprietary "stuff", or whatever. There's no getting away from it.

Bearing that in mind, having one line of code per property looks to me like the fastest, simplest, most readable and maintainable solution.

Christian Hayter
A: 

If I understood your problem correctly, you could use reflection (or dynamic code generation if it is performance sensitive) to circumvent your typing problems

There is a preety good description of how to do something like this at codeproject. Basically you get a PropertyInfo for the property you want to set (if it's not a property I think you would need dynamic code generation) and use it's setValue method (after calling the appropriate Convert.ChangeType of course). This will basicall circumvent the whole static typing, so there you are.

Grizzly