Ссылка на нескалярные переменные не поддерживается - PullRequest
0 голосов
/ 13 июля 2011

что не так с моим запросом ниже? Я получаю NotSupportedException "" Невозможно создать постоянное значение типа JobLanguage. В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid). "

public IQueryable<Candidate> GetMatchingCandidates(Job job)
{
   return from candidate in _db.Candidates                       
   where candidate.CandidateLanguages.Any(c => job.JobLanguages.Select(jl =>      jl.LanguageId.Value).Contains(c.LanguageId)) 
   orderby candidate.Name descending
   select candidate;                            
}

//caller 
List<Candidate> matchingCandidates = _repository.GetMatchingCandidates(job).ToList();

По-видимому, это известная проблема (http://msdn.microsoft.com/en-us/library/bb896317.aspx#RefNonScalarClosures), но мне интересно, как я могу обойти ее. В основном я пытаюсь сделать следующее: Сравнение двух списков с использованием linq для SQL

1 Ответ

2 голосов
/ 13 июля 2011

Ну, одну вещь, которую вы можете попробовать, - это извлечь набор желаемых языковых идентификаторов, чтобы начать с:

(я предполагаю, что языковые идентификаторы - это строки. Если нет, пожалуйста, дайте больше информации.)

public IQueryable<Candidate> GetMatchingCandidates(Job job)
{
    List<string> languageIds = job.JobLanguages
                                  .Select(jl => jl.LanguageId.Value)
                                  .ToList();
   return from candidate in _db.Candidates                       
          where candidate.CandidateLanguages
                         .Any(languageIds.Contains(c.LanguageId)) 
          orderby candidate.Name descending
          select candidate;                            
}

Если задание уже находится в базе данных, вы можете попробовать выполнить внутренний запрос, используя идентификатор задания для ссылки на копию базы данных, а не на локальную.

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