Comment retourner les résultats de la requête à partir de la méthode qui utilise LINQ to SQL
Voici le code que je travaille, je suis encore un peu nouveau pour LINQ, c'est donc un travail en cours. Plus précisément, je voudrais avoir mes résultats de cette requête (environ 7 colonnes de chaînes de caractères, entiers, et datetime), et de les retourner à la méthode qui a appelé la méthode contenant ce LINQ to SQL de la requête. Un exemple de code simple serait super utile.
using (ormDataContext context = new ormDataContext(connStr))
{
var electionInfo = from t1 in context.elections
join t2 in context.election_status
on t1.statusID equals t2.statusID
select new { t1, t2 };
}
(Dans ce cas, ma requête est de retour tout le contenu de 2 tables, l'élection et election_status.)
Vous devez vous connecter pour publier un commentaire.
Salut, le problème que vous avez avec votre requête, c'est que vous êtes en train de créer un type anonyme. Vous ne pouvez pas retourner un type anonyme à partir d'une méthode, c'est donc là que vous allez avoir de la difficulté.
Ce que vous devez faire est de créer un "wrapper" de type qui peut prendre une élection et un election_status et puis le retour de ces.
Voici un petit échantillon de ce que je parle; comme vous pouvez le voir je déclare un Tuple de la classe. La méthode que vous enveloppez de votre requête renvoie un IEnumerable.
J'espère que cela aide 🙂
Mise à JOUR
La suite de NagaMensch commentaires, une meilleure façon d'obtenir le résultat souhaité serait d'utiliser le construit en LINQ to SQL associations.
Si vous allez à votre entité diagramme et cliquez sur boîte à outils, vous verrez 3 options. De classe, d'Association et de l'Héritage. Nous voulons utiliser Association.
Cliquez sur l'Association et cliquez sur le ElectionStatus entité, maintenez le bouton de la souris enfoncé et il va vous permettre de dessiner une ligne à l'Élection de l'entité.
Une fois que vous avez tirés de la ligne, il vous demandera les propriétés qui sont impliqués dans l'association. Vous voulez choisir la StatusId colonne à partir de l'Élection de l'entité, et le StatusId colonne à partir de la ElectionStatus entité.
Maintenant que vous avez complété votre cartographie, vous serez en mesure de simplifier votre requête grandement parce que la jointure ne sera pas nécessaire. Vous pouvez accéder à l'élection de l'état, par la marque nouvelle propriété que LINQ to SQL sera ajouté à l'Élection de l'entité.
Votre code peut ressembler à ceci:
Vous pouvez également trouver un "comment" sur LINQ to SQL associations ici.
Remarque: Il est important de mentionner que si vous avez un FK relation entre vos tables dans la base de données; LINQ to SQL est automatiquement chercher la relation et de la carte de l'association pour vous (donc de la création de l'propriétés).
Vous aurez besoin de créer des classes qui ont la même structure que les types anonymes. Alors, au lieu de "nouveaux { t1, t2 }", vous utilisez "new MyClass(t1, t2)".
Une fois que vous avez un nom de classe, vous pouvez passer à tout sur la place que vous espériez.
Le problème, c'est que vous êtes la création d'un type anonyme, par conséquent, il n'est pas possible de déclarer une méthode avec ce type de retour. Vous devez créer un nouveau type qui tiendra votre résultat de la requête et à ce type de retour.
Mais je suggère de ne pas renvoyer le résultat dans un nouveau type, mais de retour juste une colection de
election
objets et l'accès à laelection_status
objets à travers la relation des propriétés en supposant que vous avez inclus dans votre modèle. Le chargement des données options de provoquer la requête pour inclure le choix exercé le statut des objets dans le résultat de la requête.Maintenant, vous pouvez effectuer les opérations suivantes.
J'général LINQ to SQL peut juste récupérer les entités liées à la demande - qui est appelée au chargement différé.
Mais cela vous oblige pas à fermer le contexte de données jusqu'à ce que vous avez fini d'utiliser les objets récupérés, donc ne peut pas être utilisé avec un
using
déclaration encapsulé dans une méthode.peut-être que ça peut aider 🙂
Vous ne pouvez pas retourner un type anonyme à partir d'une méthode. Il est disponible uniquement dans le champ d'application dans lequel il est créé. Vous aurez à créer une classe à la place.