LINQ إلى SQL: الجدول متعددة الانضمام نوع الإرجاع لا تولدها DBML

StackOverflow https://stackoverflow.com/questions/1435517

سؤال

وأنا أحاول معرفة أفضل طريقة للتعامل مع مشكلة بسيطة: لدي LINQ بسيط الانضمام إلى جدولين. أنا أعرف كيف للعودة نوع للطاولة واحدة، لأنه هو نفس الطبقة DBML إنشاؤه. ومع ذلك، ما إذا كنت تريد إرجاع البيانات من كلا tables- ليس هناك طريقة للعودة على حد سواء واستخدام علاقاتهم؟ هل حقا لديك لإنشاء نوع آخر عودة لإرجاع البيانات من كلا الجدولين؟ FYI- أنا لا أريد لإرجاع معلمة الإخراج مع الكائن الجدول الآخر. أنا أيضا لا نرغب حقا في العودة نوع مجهول. ما هو توصية أفضل الممارسات؟

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

وشكرا على اي مساعدة،

هل كانت مفيدة؟

المحلول

إذا كنت قد حددت علاقاتك في المصمم LINQ إلى SQL ثم الاستعلام أعلاه لا يحتاج بناء الجملة الانضمام في كل شيء، ببساطة 'السير على الشجرة حسب الحاجة، منها مثلا:

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

لاحظ أن 2 و 3 'من' البيانات تستخدم الكائن من سابقتها، منذ LINQ إلى SQL يجب أن نعرف عن هذه العلاقة.

ودون أن يعرفوا المزيد عن علاقاتك أنه من الصعب إعطاء إجابة أكثر دقة. كان لزاما على بعض الافتراضات حول ما هي الخصائص ذات الصلة.

نصائح أخرى

ويبدو لي ان ما كنت تبحث عن DataLoadOptions.LoadWith <>. وبهذه الطريقة يمكنك العودة كائن سؤال ويتم ملؤها الكائنات ذات الصلة في نفس الوقت من خلال الجمعيات محددة. شيء من هذا القبيل:

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;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top