1. ホーム
  2. linq

Entity Framework - "Unable to create constant value of type 'Closure type'..." エラー。

2023-08-13 05:23:17

質問

なぜエラーが発生するのでしょうか。

型'Closure type'の定数値を作成できません。以下のものだけが プリミティブ型(例えばInt32, String, Guid)のみサポートされています。 このコンテキストではサポートされていません。

以下の Linq クエリーを列挙しようとすると?

IEnumerable<string> searchList = GetSearchList();
using (HREntities entities = new HREntities())
{
   var myList = from person in entities.vSearchPeople
   where upperSearchList.All( (person.FirstName + person.LastName) .Contains).ToList();
}

更新 : 問題の切り分けのために以下を試すと、同じエラーが発生します。

where upperSearchList.All(arg => arg == arg) 

ということは、Allメソッドに問題があるようですね?何か提案はありますか?

どのように解決するのですか?

WHERE...IN"条件と同等のことをしようとしているように見えます。以下を参照してください。 LINQ to Entities を使って 'WHERE IN' スタイルのクエリを記述する方法 を参照してください。

また、この場合のエラーメッセージは特に役に立たないと思うのですが、その理由は .Contains が括弧で囲まれていないため、コンパイラは述語全体をラムダ式として認識してしまうからです。