2011-08-12 2 views
1

람다와 중첩 된 다음 LINQ- 쿼리를 수행하려고 할 때 다음 예외가 발생합니다.EF4에서 람다를 LINQ로 중첩하는 데 문제가 있습니다.

유형의 상수 값을 만들 수 없습니다. 이 컨텍스트에서는 기본 유형 ('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); 
       } 
      } 

내가 예외를 얻는 이유에 대한 단서, 내가 잘못했거나 다른 방법으로 무엇을했는지에 대한 단서가 있습니까?

도움을 미리 감사드립니다. 당신이 context.QuestionHasTags으로 목록을 혼합 ToList()

를 통해 실행을 강제 c를 작동하지 않습니다/B

+1

여러 변수를 사용함에있어 의미를 나타내지 않고 말하기 때문에 말하기 어렵습니다. –

+0

좀 더 관련성 높은 코드를 포함하도록 코드 블록을 업데이트했습니다. – wardh

답변

2

searchQuery쿼리하지만 목록이 아닙니다. 이 문제를 해결하기위한 한 가지 방법은 상위 쿼리와 하위 쿼리를 하나로 병합하는 것입니다.

+0

도움을 주셔서 감사합니다! 위대한 작품 – wardh

관련 문제