2009-08-06 8 views
0

Je suis très frustré de linq à sql en traitant de plusieurs à plusieurs relation avec l'extension de saut. Cela ne me permet pas d'utiliser des requêtes jointes. Je ne suis pas sûr que ce soit le cas pour SQL Server 2005 mais j'utilise actuellement SQL Server 2000.Stockez la procédure sélectionnez tous les champs d'une table en utilisant la jointure

Maintenant, je considère écrire une procédure de magasin pour aller chercher une table qui est appariée par deux tables, par ex. Album_Photo (Album-> Album_Photo < -Photo) et la table photo et ne veulent que les données Photos, donc je fais correspondre l'ID de l'album avec Album_Photo et utiliser cet ID pour correspondre à la photo. Dans la procédure de magasin je viens chercher toutes les données jointes. Après cela dans linq to sql, je crée un nouvel objet Album.

par exemple.

var albums = (from r in result 
    where (modifier_id == r.ModifierID || user_id == r.UserID) 
    select new Album() { 
     Name = r.Name, 
     UserID = r.UserID, 
     ModifierID = r.ModifierID, 
     ID = r.ID, 
     DateCreated = r.DateCreated, 
     Description = r.Description, 
     Filename = r.Filename 
    }).AsQueryable(); 

J'ai utilisé le AsQueryable pour obtenir le résultat comme un IQueryable plutôt que IEnumerable. Plus tard, je veux faire quelque chose avec la collection, il me donne cette erreur:

System.InvalidOperationException: Les résultats de la requête ne peuvent pas être énumérés plus d'une fois.

Répondre

0

Il semble que vous ayez une situation dans laquelle la requête a déjà été exécutée au moment où vous voulez la filtrer plus tard dans votre code.

Pouvez-vous faire quelque chose comme ...

albums var = (bla bla bla) .AsQueryable(). Où (filterClause) lorsque vous avez assez d'informations pour traiter

ce qui se passe si vous essayez albums .where (filtre) plus tard dans le code? Est-ce ce que vous essayez?