2009-12-02 4 views
0

i besoin d'insérer un disque avec LINQitérer sur une colonne d'entité LINQ

j'ai un NameValueCollection avec les données d'un poste de forme .. donc commencé dans le name=value&name2=value2 etc .. Type Format

chose est j'ai besoin pour insérer toutes ces valeurs dans la table, mais bien sûr, les champs de la table sont tapés, et j'ai besoin de taper les données avant de l'insérer

i pourrait bien sûr faire explicitement

linqtableobj.columnproperty = convert.toWhatever(value); 

mais j'ai beaucoup de colonnes dans la table, et les données qui reviennent de la forme, ne marche pas toujours contenir tous les champs de la table

Je pensais que je pouvais itérer sur les colonnes des objets LINQ, obtenir leur type de données - à utiliser pour convertir la valeur appropriée à partir des données de forme bien tout bon, mais im toujours coincé avec faire

linqtableobj.columnproterty = converted value 

... s'il y en a une pour chaque colonne dans la table

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

clairement je ne peux pas le faire, mais quelque chose comme ça possible .. ou

est-il possible de boucler autour des colonnes pour le nouveau paramètre « record » les valeurs que je vais .. et je suppose que saisir les types à ce point pour effectuer la conversion

déconcerté je suis

grâce nat

Répondre

0

Si vous avez un certain type de données avec une centaine de propriétés différentes, et que vous voulez les copier dans un type de données complètement différentes avec une centaine propriétés différentes, puis quelque part dans votre code, vous êtes va devoir définir une centaine d'instructions de "mapping" différentes. Peu importe le framework que vous utilisez ou si les instructions de "mapping" sont des lignes de code C#, des éléments XML, des fonctions lambda, des "trucs" propriétaires, etc. Il n'y a pas moyen de s'en éloigner.

Ayant cela à l'esprit, ayant une ligne de code par propriété me semble que le plus rapide, plus simple, solution la plus lisible et maintenable.

0

Si je comprends bien votre problème correctement, vous pouvez utiliser la réflexion (ou la génération de code dynamique si elle est la performance sensible) pour contourner vos problèmes de frappe

Il y a une preety bonne description de la façon de faire quelque chose comme ça at codeproject. Fondamentalement, vous obtenez un PropertyInfo pour la propriété que vous souhaitez définir (si ce n'est pas une propriété, je pense que vous auriez besoin de génération de code dynamique) et de l'utiliser est la méthode setValue (après avoir appelé la Convert.ChangeType appropriée bien sûr). Cela contournera fondamentalement toute la saisie statique, alors vous êtes là.

Questions connexes