以下のクエリでhatが間違っていますか? NotSupportedExceptionが発生しました。 "" JobLanguage型の定数を作成できません。唯一のプリミティブ型(「などのInt32、文字列、および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)ですが、私はそれを回避することができますどのように思ったんだけど。基本的に、私がやろうとしていることはこれです:Comparing two lists using linq to sql
これはちょうど私が(それを抜き出して)試したものです。しかしそれはなぜ機能するのですか? – Prabhu
@Prabhu:違いは、* list *だけがより複雑な "仕事"ではなく、式ツリー(データとしてのクエリの表現)に終わることです。基本的に、EFはあなたが仕事で行っていたすべての操作を理解するのに十分なほどスマートではないので、EFレベルに達する前にEFを実行する必要があります。 –
ありがとうございます... – Prabhu