2010-10-12 10 views
3

J'ai une image de classe existante qui est largement utilisée dans mon application. J'ai besoin de retourner une liste générique d'images (List) vers le frontend mais comme il n'y a pas de proc stocké dans la base de données de 3ed party, je dois utiliser Linq to Sql.Convertir le modèle linq en liste générique

J'ai créer un fichier dbtm de la base de données Je Quering dans mon DAL qui ressemble à:

ImageCat 
    ImageId 
    Name 
    Width 
    DateModified 
    Height 
    CatId 

Ma classe d'image est la suivante

public class Image 
{ 
public int Id { get; set; } 
public string Name { get; set; } 
public int Width { get; set; } 
public int Height { get; set; } 
} 

Mon LINQ to Sql est la suivante :

var imageList = (from ic in db.ImageCats 
    where ic.CatID.Contains(category) 
select ic).ToList(); 

var finalImageList = new List<Image>(); 
foreach (ImageCat ic in imageList) 
{ 
Image image = new Image(); 
image.Id= ic.ImageID; 
image.Height = (int)ic.Height; 
image.Name = ic.Name; 
image.Width = (int)ic.Width; 

finalImageList.Add(image); 
} 

Je ne veux pas être en boucle sur le résultat linq à Sql pour configurer ma liste. Y a-t-il un moyen plus facile. Quelle est la meilleure pratique? Je n'aime pas l'idée d'exposer mes classes dbml à la couche de présentation.

Répondre

5

Vous pouvez sélectionner Vous pouvez le faire comme directement à vous Image classe dans la requête LINQ

var imageList = (
    from ic in db.ImageCats 
    where ic.CatID.Contains(category) 
    select new Image() 
    { 
     Id= ic.ImageID, 
     Height = (int)ic.Height, 
     Name = ic.Name, 
     Width = (int)ic.Width, 
    } 
).ToList(); 
+0

Merci, fonctionne très bien – skyfoot

0

donc:

var imageList = db.ImageCats.Where(ic => ic.CatID.Contains(category)) 
.Select(ic => new Image{ Id = ic.ImageID, 
         Height = (int)ic.Height, 
         Name = ic.Name, 
         Width = (int)ic.Width}) 
.ToList(); 
+0

Fonctionne bien, mais vous créerez tout un tas d'objets ImageCat temporaires en cours de route. –

+0

@Albin, vous avez raison. J'ai corrigé le code. –

-1
IEnumerable<Image> = from ic in db.ImageCats 
        where ic.CatID.Contains(category) 
        select new Image() { Id= ic.ImageID, Height = (int)ic.Height, Name = ic.Name, Width = (int)ic.Width }.ToList(); 

Je pense que quelque chose le long de ces lignes vous donnera une IEnumerable rempli d'objets Image. Je l'ai écrit dans la fenêtre d'édition pour que je puisse être loin cependant. Essayez-le et laissez-moi savoir si cela a fonctionné pour vous.

+1

Il y a environ trois erreurs qui empêchent la compilation de ce code. –

+0

regardant cela maintenant, ainsi qu'en regardant la réponse choisie, je les vois. Je pense que d'autres pourraient venir après avoir réparé ceux-là aussi. Désolé pour le code merdique (comme il a été écrit dans l'éditeur), mais l'idée était saine: P – Adkins

Questions connexes