在EF4中使用LINQ嵌套Lambda时遇到问题

时间:2011-08-12 12:46:21

标签: c# linq entity-framework exception lambda

尝试执行以下与Lambda嵌套的LINQ查询时,我收到以下异常。

  

无法创建类型的常量值。只有原始类型   (在这种情况下支持'',如Int32,String和Guid'。

如果我删除lambda它工作正常,但我当然不会得到我想要的结果。

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 个答案:

答案 0 :(得分:2)

searchQuery不是查询,而是一个列表,b / c强制执行ToList()

将列表与context.QuestionHasTags混合不起作用。解决此问题的一种方法是将上下查询合并为一个。