3

データベースからすべての顧客レコードを取得するデリゲートを作成しています。この方法でコンパイル済みクエリを使用しましたが、何らかの理由で、Visual Studio 2012 with EF でこのようなエラーが発生します。

エラー: 型 'HTML5Basics.NorthwindDataContext' は、ジェネリック型またはメソッド 'System.Data.Objects.CompiledQuery.Compile(System.Linq.Expressions.Expression>)' の型パラメーター 'TArg0' として使用できません。「HTML5Basics.NorthwindDataContext」から「System.Data.Objects.ObjectContext」への暗黙的な参照変換はありません。

このエラーは何ですか?また、このエラーを解決するにはどうすればよいですか?

コードは次のとおりです。

public static Func<NorthwindDataContext, string, IEnumerable<SimpleCustomer>> CustomersByCity =
            CompiledQuery.Compile<NorthwindDataContext, string, IEnumerable<SimpleCustomer>>(
            (NorthwindDataContext db, string city) =>
            from c in db.Customers
            where c.City == city
            select new SimpleCustomer { ContactName = c.ContactName });
4

1 に答える 1

1

「HTML5Basics.NorthwindDataContext」から「System.Data.Objects.ObjectContext」への暗黙的な参照変換はありません。

2 つの型の間で変換がないことを示します。

.NET 4.5、EF5 には、CompiledQuery.Compile 関数を含む System.Data.Objects 名前空間があります。System.Data.Linq 名前空間にも 1 つ存在します。

それらは異なる署名を持っています:

System.Data.Linq 名前空間: (MSDN http://msdn.microsoft.com/en-us/library/bb548737.aspxから取得):

public static Func<TArg0, TResult> Compile<TArg0, TResult>(
Expression<Func<TArg0, TResult>> query)
where TArg0 : DataContext

System.Data.Objects 名前空間 (.pdb から):

public static Func<TArg0, TResult> Compile<TArg0, TResult> 
(Expression<Func<TArg0, TResult>> query) 
where TArg0 : ObjectContext

基本的に、次の 2 つの選択肢があります。

1) System.Data.Linq 名前空間にあるものを使用します。

2) ObjectContext (または継承された型) を System.Data.Objects 名前空間のバージョンに渡します。

于 2013-10-16T14:34:29.550 に答える