2009-05-28 9 views
1

J'ai essayé de séparer une chaîne dans une requête linq. J'ai une erreur dit "Noeud d'expression non reconnu: ArrayIndex". Est-ce que quelqu'un sait comment réaliser cela? Mon exemple de code est:Chaîne fractionnée dans l'instruction de sélection Linq

List<Task> Result= (from t in TaskDB.Tasks 
             select new Task 
             { 
              Description = t.Description.Split('-')[0].ToString(), 
              Id = ts.id, 
             }).ToList(); 

Répondre

8

Le problème est que la select partie de votre requête ne peut pas être converti en SQL être exécuté sur le serveur (d'où l'erreur "nœud d'expression non reconnu"). Essayez quelque chose comme ça, qui assure que le code nécessaire est exécuté côté client:

var result = (from t in TaskDB.Tasks.AsEnumerable() 
       select new Task 
       { 
        Description = t.Description.Split('-')[0].ToString(), 
        Id = ts.id, 
       }).ToList(); 

L'astuce est tout simplement ici pour appeler la méthode d'extension AsEnumerable avant de sélectionner les éléments.

2

Avez-vous vraiment besoin de faire le fractionnement de chaîne côté serveur? À moins que vous ayez vraiment besoin de l'utiliser dans une requête, ou si vous économiserez beaucoup de bande passante pour transférer uniquement la première partie de la chaîne, je la récupèrerais dans la partie "LINQ to SQL" et la post-traiterai avec LINQ-to-Objects. Quelque chose comme ceci:

List<Task> Result= TaskDB.Tasks.AsEnumerable() // Don't do the rest in SQL! 
           .Select(t => new Task 
     { 
       Description = t.Description.Split('-')[0].ToString(), 
       Id = t.id, 
     }).ToList(); 

(Il sera plus facile de bien formater dans un IDE avec des colonnes un peu plus :)

Questions connexes