1

我试图找出处理一个简单问题的最佳方法:我有一个简单的 LINQ 连接到两个表。我知道如何返回一个表的类型,因为它与生成的 dbml 类相同。但是,如果我想从两个表中返回数据怎么办 - 有没有办法同时返回并使用它们的关系?我真的必须创建另一个返回类型来返回两个表中的数据吗?仅供参考-我不想与其他表对象一起返回输出参数;我对返回匿名类型也不是很感兴趣。最佳实践建议是什么?

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

谢谢你的帮助,

4

2 回答 2

1

如果您在 LINQ-to-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-to-SQL 应该已经知道这种关系。

如果不了解更多关于你们的关系,就很难给出更准确的答案。我不得不对相关属性做出一些假设。

于 2009-09-16T21:39:00.047 回答
0

在我看来,您正在寻找的是 DataLoadOptions.LoadWith<>。这样您就可以返回您的 Question 对象,并且通过定义的关联同时填充相关对象。像这样的东西:

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;
    }
}
于 2009-09-17T00:00:34.723 回答