2010-01-28 6 views
3

Si j'ai créé une instruction Linq comme indiqué ci-dessous, cela fonctionne correctement.Création d'une instruction Linq pour créer des objets

var Jobs = from a in ctx.MyExport 
      select new 
      { 
       FileName = a.FilePath, 
       JobId = a.ID, 
      }; 

Si je veux utiliser une classe plutôt que d'un type anonyme, je reçois l'erreur suivante « ne peut convertir l'expression lambda de type « string », car il est pas un type de délégué ».

Voici le code que je veux travailler:

var Jobs = from a in ctx.MyExport 
      select new MyClass 
      { 
       FileName = a.FilePath, 
       JobId = a.ID, 
      }; 

Et voici la classe:

public class MyClass 
{ 
    public string FileName { get; set; } 
    public Guid JobId { get; set; } 
} 

Quelqu'un peut-il me dire ce que je fais mal et comment y remédier?

+0

J'ai corrigé le problème en remplaçant "var" par IEnumerable Retrocoder

Répondre

1

Le code ci-dessus est correct, vous recevez un message d'erreur en raison du code que vous n'avez pas montré.

Vous tentez d'affecter une requête non matérialisée à une variable de chaîne, ce qui entraînera une erreur. Le changement de type à IEnumerable matérialisera la requête immédiatement si vous l'utilisez ou non, il sera retiré de la base de données.Ainsi, cette solution n'est pas recommandée.

La réponse serait de matérialiser la requête avant utilisation, je suppose que vous faites foreach sur cette collection, donc Jobs.AsEnumerable() ou Jobs.ToList() (en fonction de ce que vous voulez à faire avec) est ce que vous devriez faire.

Questions connexes