Возникли проблемы с вложением лямбда с LINQ в EF4 - PullRequest
1 голос
/ 12 августа 2011

Я получаю следующее исключение при попытке выполнить следующий LINQ-запрос, вложенный в Lambda.

Невозможно создать постоянное значение типа. Только примитивные типы («такие как Int32, String и Guid») поддерживаются в этом контексте.

Если я удаляю лямбду, она работает нормально, но тогда я, конечно, не получаю желаемого результата.

var context = new dbContext();
            var searchQuery = (from q in context.Questions
                               where q.Topic.Contains(searchTerm) || q.QuestionText.Contains(searchTerm)
                               select q).ToList();
            var questionsBasedOnTags = (from tags in context.Tags
                                        where tags.Tag.Contains(searchTerm)
                                        select tags).ToList();
            List<QuestionHasTags> tagQuestionIds = new List<QuestionHasTags>();
            foreach (var item in questionsBasedOnTags)
            {
                var getQuestionIds = (from q in context.QuestionHasTags
                                      where context.QuestionHasTags.Any(o => o.TagId == item.TagId && !searchQuery.Any( w => w.QuestionId == o.Questions.QuestionId) && !tagQuestionIds.Any(z => z.QuestionId == o.Questions.QuestionId))
                                      select q).ToList();
                foreach (var questionHasTagId in getQuestionIds)
                {
                    tagQuestionIds.Add(questionHasTagId);
                }
            }

Есть какие-нибудь подсказки, почему я получаю исключение, что я сделал неправильно или другой способ сделать это?

Заранее спасибо за помощь.

1 Ответ

2 голосов
/ 12 августа 2011

searchQuery - это не Запрос , а список, из-за которого вы принудительно выполнили ToList()

Смешивание списка с context.QuestionHasTags не работает. Один из способов исправить это - объединить верхний и нижний запросы в один.

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