Linq to SQL: тип возврата объединения нескольких таблиц не генерируется dbml - PullRequest
1 голос
/ 17 сентября 2009

Я пытаюсь найти лучший способ справиться с простой проблемой: У меня есть простое соединение 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;
    }

Спасибо за любую помощь,

Ответы [ 2 ]

1 голос
/ 17 сентября 2009

Если вы определили свои отношения в конструкторе 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-й операторы 'from' используют объект из предыдущего, поскольку LINQ-to-SQL уже должен знать об этом отношении.

Не зная больше о ваших отношениях, сложнее дать более точный ответ. Мне пришлось сделать некоторые предположения о том, что это были за свойства.

0 голосов
/ 17 сентября 2009

Похоже, вы ищете 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;
    }
}
...