Linq to Entities - жду загрузки с помощью Include () - PullRequest
9 голосов
/ 06 июля 2010

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

dbo.tblCategorydbo.tblQuestion (отношение один к одному с tblCategory)dbo.tblAnswer (отношение один к одному с tblQuestion)

Итак, в основном я пытаюсь загрузить категорию, я хочу также загрузить все Вопросы и все ответы.1006 * Теперь я смог сделать это, используя следующий код:

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

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

1 Ответ

8 голосов
/ 06 июля 2010

OK; Я смог заставить это работать, с некоторой помощью от здесь .

В основном мне нужно сделать следующее:

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», который будет загружать ответы на все вопросы.

Так что, несмотря на то, что, похоже, я только вытягиваю ответы на первый вопрос, я фактически вытягиваю все ответы на все вопросы.

...