【问题标题】:Having trouble nesting Lambda with LINQ in EF4在 EF4 中使用 LINQ 嵌套 Lambda 时遇到问题
【发布时间】:2011-08-12 21:20:33
【问题描述】:

我在尝试执行以下与 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);
                }
            }

关于我为什么会出现异常、我做错了什么或其他方法的任何线索?

提前感谢您的帮助。

【问题讨论】:

  • 很难说,因为您使用了多个变量而没有显示它们的含义。
  • 更新了代码块以包含更多相关代码。

标签: c# linq entity-framework exception lambda


【解决方案1】:

searchQuery 不是一个查询,而是一个列表,因为你通过ToList() 强制执行

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

【讨论】:

  • 感谢您的帮助!效果很好
猜你喜欢
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 2014-05-07
  • 1970-01-01
  • 2014-08-31
  • 2013-02-16
相关资源
最近更新 更多