Linq к Объектам - нетерпеливое использование загрузки Включают ()

У меня есть эта действительно основная структура таблицы:

dbo.tblCategory
dbo.tblQuestion (многие к отношениям к tblCategory)
dbo.tblAnswer (многие к отношениям к tblQuestion)

Так в основном то, что я пытаюсь сделать, - когда я загружаю категорию, я хочу также загрузить все Вопросы и все Ответы.

Теперь, я смог сделать это с помощью следующего кода:

public tblCategory Retrieve(int id)
{
    using (var entities = Context)
    {
        var dto =
            (from t in entities.tblCategory.Include("tblQuestion")
                                           .Include("tblQuestion.tblAnswers")    
                 where t.Id == id
                 select t).FirstOrDefault();

            return entities.DetachObjectGraph(dto);
        }
    }
}

Однако я не абсолютно очарован этим; если отношения называют изменение в моей модели; я не собираюсь получать ошибку при разрабатывании проекта. Идеально, я хотел бы использовать лямбда-выражение; что-то вроде этого:

public tblCategory Retrieve(int id)
{
    using (var entities = Context)
    {
        var dto =
            (from t in entities.tblCategory.Include(t => t.tblQuestion)
             where t.Id == id
             select t).FirstOrDefault();

        return entities.DetachObjectGraph(dto);
    }
}

Теперь, с вышеупомянутым отрывком; я застреваю о том, как выполнить развертку к таблице Answers. Какая-либо идея о том, что я мог использовать для лямбда-выражения для этого?

9
задан Jim B 6 July 2010 в 12:45
поделиться

1 ответ

Хорошо; Мне удалось заставить это работать с некоторой помощью здесь .

По сути, мне нужно сделать следующее:

public tblCategory Retrieve(int id)
{
    using (var entities = Context)
    {
        var dto =
            (from t in entities.tblCategory.Include(t => t.tblQuestion)
                                           .Include(t => t.tblQuestion.First().tblAnswer)
             where t.Id == id
             select t).FirstOrDefault();

        return entities.DetachObjectGraph(dto);
    }
}

По приведенной выше ссылке я могу разыменовать tblAnswers только для отдельных элементов коллекции вопросов. Здесь я выбрал разыменование tblAnswers для первого элемента коллекции. На самом деле это лямбда-выражение просто используется для создания пути свойства «tblQuestion.tblAnswers», который будет загружать ответы на все вопросы.

Так что, хотя мне кажется, что я беру только ответы на первый вопрос, я на самом деле беру все ответы на все вопросы.

8
ответ дан 4 December 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: