EF core ThenInclude Select говорит: «Лямбда-выражение, используемое внутри Include, недопустимо» - PullRequest
0 голосов
/ 11 февраля 2020
var test = await Db.Tests.Include(test => test.Questions)
                            .ThenInclude(ques => ques.Choices.Select(
                                ch => new {
                                    ch.Id, ch.OptionName, 
                                    ch.OptionText, ch.OptionDetails, 
                                    ch.IsAnswer, ch.QuestionId
                            })).AsNoTracking()
                            .FirstOrDefaultAsync(z => z.TestId == testId);

Без Выберите пункт , он работает нормально. Но мне не нужны все свойства Choices , поэтому я пытаюсь выбрать некоторые свойства, используя предложение Select .

Эта ошибка устраняется:

System.InvalidOperationException: лямбда-выражение, используемое внутри Include, недопустимо.

Кто-нибудь может сказать мне, что здесь не так?

1 Ответ

0 голосов
/ 11 февраля 2020

Я думаю, вы хотите что-то вроде:

var test = await Db.Tests
    .Where(test => test.TestId == testId)
    .Include(test => test.Questions) // Shouldn't need this
    .ThenInclude(ques => ques.Choices) // Shouldn't need this
    .SelectMany(test => test.Questions.SelectMany(ques => ques.Choices.Select(ch => new {
        ch.Id,
        ch.OptionName, 
        ch.OptionText,
        ch.OptionDetails, 
        ch.IsAnswer,
        ch.QuestionId
    }))))
    .AsNoTracking();

Это даст вам все варианты для конкретного теста.

Но ... так как вы материализуете результаты как лямбда, тебе на самом деле не нужно ни Include. (EF выдаст предупреждения о том, что он все равно проигнорировал ваш Include в консоли).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...