LINQ到SQL:多表连接不DBML生成的返回类型(Linq to SQL: Multi-table

2019-10-17 14:40发布

我试图找出处理一个简单的问题的最好办法:我有一个简单的LINQ加盟两个表。 我知道如何返回类型为一个表,因为它是一样的生成的dbml类。 但是,如果我想要的东西从两个表 - 返回的数据是不是有办法同时返回和使用他们的关系? 难道我真的要创建另一个返回类型从两个表返回的数据? 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;
    }

谢谢你的帮助,

Answer 1:

如果您已经定义在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
);

请注意,“从”语句的第二和第三个正在使用的对象从以前的一个,因为LINQ到SQL应该已经知道了关系。

不知道更多关于你的关系是很难给出一个比较确切的答案。 我不得不做出什么相关性是一些假设。



Answer 2:

听起来像你对我所寻找的是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;
    }
}


文章来源: Linq to SQL: Multi-table join return type not generated by dbml