Domanda

Sto cercando di capire il modo migliore per gestire un semplice problema: Ho un semplice collegamento LINQ a due tabelle. So come restituire il tipo per una tabella, poiché è uguale alla classe dbml generata. Tuttavia, cosa succede se desidero restituire dati da entrambe le tabelle: non esiste un modo per restituire entrambi e utilizzare le loro relazioni? Devo davvero creare un altro tipo di ritorno per restituire i dati da entrambe le tabelle? Cordiali saluti, non voglio restituire un parametro di output con l'altro oggetto tabella; Inoltre, non sono davvero interessato a restituire un tipo anonimo. Qual è la raccomandazione delle migliori pratiche?

    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;
    }

Grazie per l'aiuto,

È stato utile?

Soluzione

Se hai definito le tue relazioni nella finestra di progettazione LINQ-to-SQL, la tua query sopra non necessita affatto della sintassi del join, semplicemente "cammina l'albero" secondo necessità, ad esempio:

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
);

Si noti che la seconda e la terza istruzione "da" utilizzano l'oggetto della precedente, poiché LINQ-to-SQL dovrebbe già conoscere la relazione.

Senza sapere di più sulle tue relazioni è più difficile dare una risposta più esatta. Ho dovuto fare alcune ipotesi su quali fossero le proprietà correlate.

Altri suggerimenti

Mi sembra che quello che stai cercando sia DataLoadOptions.LoadWith < > ;. In questo modo si restituisce l'oggetto Domanda e gli oggetti correlati vengono popolati contemporaneamente attraverso le associazioni definite. Qualcosa del genere:

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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top