2009-11-23 9 views
1

J'essaie de retourner une liste de résultats, où la table jointe a plusieurs valeurs, mais je veux seulement une valeur d'image pour chaque valeur de liste.Aide avec Linq to SQL; retourner un résultat de une à plusieurs relation

Le SQL est comme ceci:

SELECT 
    Title, Comments, ThumbNailPath, thumbheight, thumbwidth 
FROM 
     Listings as l INNER JOIN 
     Images as i ON l.id = i.ListingId 
WHERE 
    (i.ImageSlot = 1) 

Ma classe repository ressemble à quelque chose comme ceci: (db.GetListings() est la méthode de procédure stockée j'ai ajouté à la section des méthodes du fichier .dbml)

private ListingModelDataContext db = new ListingModelDataContext(); 

public IQueryable FindAllListings() 
    { 
     //return all listings and first associated thumbnail 
     return db.GetListings();     
    } 

Lorsque je tente d'appeler de procédure stockée j'obtiens l'erreur

'System.Data.Linq.ISingleResult' à « System.Linq. IQueryable '. Une conversion explicite existe (êtes-vous manque un casting?)

Je cherche des conseils sur la façon dont je pourrais appeler cette déclaration soit sql d'une procédure ou simplement structurer le LINQ pour retourner cette valeur stockée.

Ma préférence est de savoir comment écrire l'instruction LINQ. Pour clarifier, j'ai une relation de un à plusieurs sur la table des images. (plusieurs images par fiche) Je veux seulement renvoyer la première image sur une page de résultats de recherche. Donc, pour chaque liste, renvoyer la valeur de l'image où imageSlot = 1.

Je devrais obtenir une liste de lignes montrant les valeurs de liste jointes aux valeurs d'image. J'obtiens les résultats corrects dans SQL mais je ne sais pas comment l'écrire dans linq ou comment appeler le sproc correctement.

Merci d'avance et désolé si c'est difficile à lire.

+0

Il y a une erreur SQL ici ... qu'est-ce qui est aliasé à h? –

+1

Pouvez-vous poster le code Linq to SQL que vous utilisez pour appeler ce SP? – ristonj

+0

votre droit il devrait être l.id je l'ai tapé dans la fenêtre mal. – Andrew

Répondre

0

Essayez-vous de faire soemthing comme:

var result = (stored proc).Single() 

ou

var result = (stored proc).SingleOrDefault() 

?? Cela briserait s'il y a en effet plusieurs éléments à revenir - au lieu d'utiliser les .First() ou .FirstOrDefault() méthodes:

var result = (stored proc).FirstOfDefault(); 

retourne la première entrée de la procédure stockée ou null si le retourne proc stocké aucune valeur du tout.

Marc

+0

J'essaie de retourner plusieurs lignes, mais seulement une ligne sur la table des images. Je n'ai besoin que de la clause WHERE. – Andrew

Questions connexes