Frage

Ich versuche, den besten Weg, um herauszufinden, ein einfaches Problem zu umgehen: Ich habe eine einfache LINQ zu zwei Tabellen verknüpfen. Ich weiß, wie die Art für eine Tabelle zurück, da sie die gleiche wie die erzeugte dbml Klasse. Was aber, wenn ich will von beiden Tabellen- Daten zurückgeben nicht da ist ein Weg, um sowohl zurückzukehren und ihre Beziehungen zu nutzen? Sie einen anderen Rückgabetyp erstellen Ich muss wirklich die Daten aus beiden Tabellen zurück? FYI Ich möchte nicht, einen Ausgabeparameter mit dem anderen Tabellenobjekt zurückzukehren; Ich bin auch nicht wirklich daran interessiert, einen anonymen Typ in der Rückkehr. Was ist die beste Praxis Empfehlung?

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

Vielen Dank für jede Hilfe,

War es hilfreich?

Lösung

Wenn Sie Ihre Beziehungen in der LINQ to SQL-Designer dann obige Abfrage muss nicht die Join-Syntax überhaupt definiert haben, einfach zu Fuß den Baum "nach Bedarf, z.

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

, dass die 2. und 3. ‚aus‘ Aussagen werden mit dem Objekt aus dem vorherigen, da LINQ-to-SQL sollten bereits über die Beziehung kennen.

Ohne mehr über Ihre Beziehungen zu wissen, ist es schwieriger, eine genauere Antwort zu geben. Ich musste einige Annahmen darüber, was die damit verbundenen Eigenschaften waren.

Andere Tipps

Für mich klingt wie das, was Sie suchen ist DataLoadOptions.LoadWith <>. So können Sie Ihre Frage-Objekt zurück und die damit verbundenen Aufgaben werden zur gleichen Zeit durch die definierten Assoziationen bevölkert. So etwas wie folgt aus:

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;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top