Question

J'essaie de trouver le meilleur moyen de gérer un problème simple: J'ai un simple LINQ joindre à deux tables. Je sais comment renvoyer le type pour une table, car il est identique à la classe dbml générée. Cependant, si je veux renvoyer des données des deux tables, n'y a-t-il pas moyen de renvoyer les deux et d'utiliser leurs relations? Dois-je vraiment créer un autre type de retour pour renvoyer les données des deux tables? FYI- Je ne veux pas renvoyer un paramètre de sortie avec l'autre objet de la table; Je ne suis pas non plus intéressé par le renvoi d'un type anonyme. Quelle est la recommandation de meilleure pratique?

    public IQueryable<Consumer_Question> GetQuestions(int subCategoryId)
    {
        //create DataContext
        MototoolsDataContext mototoolsDataContext = new MototoolsDataContext();
        mototoolsDataContext.Log = Console.Out;

        var subcategoriestag = (from subCatTag in mototoolsDataContext.Consumer_SubCategoriesTags
                                join tagQuestion in mototoolsDataContext.Consumer_TagQuestions on subCatTag.TagID equals tagQuestion.TagID
                                join question in mototoolsDataContext.Consumer_Questions on tagQuestion.QuestionsID equals question.ID
                                where subCatTag.SubCategoriesID == subCategoryId
                                orderby subCatTag.ID descending
                                select question);
                                //select new { question, tagQuestion });

        return subcategoriestag;
    }

Merci pour votre aide,

Était-ce utile?

La solution

Si vous avez défini vos relations dans le concepteur LINQ-to-SQL, votre requête ci-dessus n'a absolument pas besoin de la syntaxe de jointure. Il suffit simplement de "parcourir l'arborescence" selon les besoins, par exemple:

.
var subCategoriesTag = (
    from subCatTag in motoToolsDataContext
    from tagQuestion in subCatTag.TagQuestions
    from question in tagQuestion
    where subCatTag.SubCategoriesID == subcategoryId
    orderby subCatTag.ID descending
    select question
);

Notez que les 2ème et 3ème déclarations 'from' utilisent l'objet du précédent, car LINQ-to-SQL devrait déjà connaître la relation.

Sans en savoir plus sur vos relations, il est plus difficile de donner une réponse plus précise. Je devais faire des hypothèses sur les propriétés connexes.

Autres conseils

Cela me semble que ce que vous recherchez est DataLoadOptions.LoadWith < > ;. De cette façon, vous retournez votre objet Question et les objets associés sont renseignés en même temps via les associations définies. Quelque chose comme ça:

public IQueryable<Consumer_Question> GetQuestions(int subCategoryId)
{
    //create DataContext
    using (MototoolsDataContext mototoolsDataContext = new MototoolsDataContext())
    {
        mototoolsDataContext.Log = Console.Out;
        DataLoadOptions options = new DataLoadOptions();
        options.LoadWith<Consumer_Questions>(q => q.Consumer_TagQuestions);
        options.LoadWith<Consumer_TagQuestions>(tag => tag.Consumer_SubCategoriesTags);
        mototoolsDataContext.LoadOptions = options;

        var questions = (from subCatTag in mototoolsDataContext.Consumer_SubCategoriesTags
                                join tagQuestion in mototoolsDataContext.Consumer_TagQuestions on subCatTag.TagID equals tagQuestion.TagID
                                join question in mototoolsDataContext.Consumer_Questions on tagQuestion.QuestionsID equals question.ID
                                where subCatTag.SubCategoriesID == subCategoryId
                                orderby subCatTag.ID descending
                                select question);
                                //select new { question, tagQuestion });

        return questions;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top