Linq to SQL, Procédures Stockées avec Plusieurs Résultats

Nous avons suivi l'approche ci-dessous pour obtenir les données à partir de plusieurs résultats à l'aide de LINQ to SQL

CREATE PROCEDURE dbo.GetPostByID
(
    @PostID int
)
AS
    SELECT    *
    FROM      Posts AS p
    WHERE     p.PostID = @PostID

    SELECT    c.*
    FROM      Categories AS c
    JOIN      PostCategories AS pc
    ON        (pc.CategoryID = c.CategoryID)
    WHERE     pc.PostID = @PostID

L'appel de la méthode dans la classe hérite de DataContext devrait ressembler à:

[Database(Name = "Blog")]
public class BlogContext : DataContext
{
    ... 

    [Function(Name = "dbo.GetPostByID")]
    [ResultType(typeof(Post))]
    [ResultType(typeof(Category))]
    public IMultipleResults GetPostByID(int postID)
    {
        IExecuteResult result = 
            this.ExecuteMethodCall(this, 
                  ((MethodInfo)(MethodInfo.GetCurrentMethod())), 
                  postID);

        return (IMultipleResults)(result.ReturnValue);
    }
}

Avis que la méthode est décoré non seulement avec la Fonction d'attribut qui correspond au nom de la procédure stockée, mais aussi avec la ReturnType attributs avec les types de résultats que la procédure stockée renvoie. En outre, la méthode renvoie un type d'interface de IMultipleResults:

public interface IMultipleResults : IFunctionResult, IDisposable
{
    IEnumerable<TElement> GetResult<TElement>();
}

de sorte que le programme peut utiliser cette interface pour récupérer les résultats:

BlogContext ctx = new BlogContext(...);

IMultipleResults results = ctx.GetPostByID(...);

IEnumerable<Post> posts = results.GetResult<Post>();

IEnumerable<Category> categories = results.GetResult<Category>();

Au-dessus de procédures stockées, nous avions deux requêtes select
1. Sélectionnez la requête, sans jointure
2. Requête Select avec Jointure

Mais au-dessus de la deuxième requête sélectionner les données qui est affichée est à partir de celui de la table c'est à dire à partir de la table Catégories. Mais nous avons utilisé les rejoindre et que vous voulez afficher la table de données avec les résultats des deux tableaux c'est à dire à partir de Catégories ainsi que PostCategories.

  1. S'il vous plaît si quelqu'un peut me le faire savoir comment atteindre cet objectif à l'aide de LINQ to SQL
  2. Qu'est-ce que la performance compromis si nous utilisons l'approche ci-dessus vis-à-vis de mettre en œuvre l'approche ci-dessus avec de simples SQL
J'ai discuté quelque chose de semblable à ce cours dans le stackoverflow.com/questions/776426/... - juste au cas où vous vouliez vous y référer. Pure.Krome est une assez bonne connaissance dans ce domaine, pourrait être utile de vérifier sa réponse.

OriginalL'auteur | 2008-12-16