2013-02-12 4 views
1

J'ai le code suivant pour mettre à jour ma table en utilisant linq to entity.Meilleure façon de gérer la liste de chaînes

Il faut deux paramètres on est une chaîne de caractères et une chaîne list.my linq query met à jour la colonne avec \ r \ n. Je m'attends à ce que ma liste de chaînes (HoursByRate) ait de une à cinq valeurs. Par exemple, si ma liste de chaînes n'a qu'une seule valeur, dans ce cas, puis-je affecter le reste (HoursByRate2 -5) en tant qu'espace vide? ou

d'écrire une méthode distincte pour répondre à cette logique?

string HoursByRate1 = HoursByRate[0].ToString(); 
string HoursByRate2 = HoursByRate[1].ToString();//assign empty if no value 
string HoursByRate3 = HoursByRate[2].ToString(); 
string HoursByRate4 = HoursByRate[3].ToString(); 
string HoursByRate5 = HoursByRate[4].ToString(); 
var query = 
// var querySEVTs = 
    from SEVTs in db.SEVTs 
    where 
    SEVTs.SESID == BookingSesid 
    select SEVTs; 
foreach (var SEVTs in query) 
{ 
    SEVTs.USER3 = (HoursByRate1 + SqlFunctions.Char(10) + SqlFunctions.Char(13) + HoursByRate2 + SqlFunctions.Char(10) + SqlFunctions.Char(13) + HoursByRate3 + SqlFunctions.Char(10) + SqlFunctions.Char(13) + HoursByRate4 + SqlFunctions.Char(10) + SqlFunctions.Char(13) + HoursByRate5 + SqlFunctions.Char(10) + SqlFunctions.Char(13)); 
} 
db.SaveChanges(); 
; 
+0

Quelle est la question? Où est exactement le problème? – ethicallogics

+0

Je n'ai aucun problème, je demande une suggestion pour écrire un meilleur moyen de répondre à l'une des conditions que j'ai mentionné ci-dessus. Si la liste de chaînes ne contient pas toutes les cinq valeurs, est-ce une bonne idée d'attribuer null pour le reste? – Usher

+0

Si vous transmettez une liste, je pense que HoursByRate [1] donnera une exception s'il n'a qu'un seul élément. – ethicallogics

Répondre

1
string value = string.Empty; 
for (int i = 0; i < 5; i++) 
     { 
      string str = " "; 
      if (i < HoursByRate.Count()) 
       str = HoursByRate[i]; 
      value += str + ((char)10).ToString() + ((char)13).ToString(); 
     } 

foreach (var SEVTs in query) 
{ 
    SEVTs.USER3 = value; 
} 
+0

, j'ai essayé avec l'instruction switch et essayé le vôtre aussi, j'ai eu l'exception "Cette fonction peut seulement être invoquée de LINQ aux entités." – Usher

+0

"SqlFunctions.Char (10) + SqlFunctions. Char (13) "ce n'est pas recoredized – Usher

+0

Il suffit de le remplacer par AScii valeur de 10 et 13. – ethicallogics

2

Vous ne devriez pas avoir ce problème en premier lieu - repenser votre schéma de base de données:

Utilisez une table (par exemple, « hourlyRates ») qui a une clé étrangère sur votre table d'utilisateur et un seul horaire taux. Il peut y avoir plusieurs lignes pour chaque utilisateur (ou quel que soit votre tableau principal), dans votre cas, un à cinq. Pour obtenir tous les taux horaires pour un utilisateur donné, vous pouvez ensuite rejoindre la table user avec la table hourlyRate basée sur l'identifiant de l'utilisateur.

+0

true mais la base de données est tierce, donc nous n'avons aucun contrôle. Je dois le faire par l'extrémité avant :( – Usher

0

Essayez-vous de faire ce que fait la méthode String.Join?

SEVTs.USER3 = String.Join(SqlFunctions.Char(10) + SqlFunctions.Char(13), HoursByRate) 
+0

, essaye vraiment de faire quoi "éthicologie" mentionné ci-dessus, mais j'ai utilisé la déclaration de commutateur, mais les deux sont échoués – Usher

Questions connexes