12

CodeFirstアプローチを使用しており、DbSetをObjectQueryに変換する必要がある問題が発生しました。 これは私が変換のためにしたものです。EntityフレームワークのDbSetをObjectQueryに変換する方法

ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext; 
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>(); 

ここで、dbはDbContextから継承したコンテキストであり、Requestはクラスです。

ObjectQueryMethod(objectSet)としてObjectQueryが必要なメソッドを呼び出そうとすると、次のエラーがスローされます。

「『System.Data.Entity.DbSet <>』と 『System.Data.Objects.ObjectQuery <>』の間には暗黙的な変換が存在しないため、条件式のタイプを決定することはできない」

すべてのヘルプれます非常に感謝!

+0

なぜあなたはDbSetをObjectQueryに変換する必要がありますか? – Kittoes0124

+0

詳細を提供する - 'ObjectQueryMethod'とは何ですか?あなたの現在のアプローチは正しいです。 'DbSet'を' ObjectQuery'に変換することはできません。 'ObjectSet'を作成し、' DbSet'の代わりに使用する必要があります。 –

+0

@Kittoes:JQGridで高度な検索を実装しようとしています。ObjectQueryは、サーバーに返されたパラメータ(フィルタ)を解析するのに適しているようです。 – inspiringmyself

答えて

23

答えが見つかりました。もちろん、以下のコード行を使用して、EntityフレームワークのDbSetをObjectQueryに変換することは可能です。

ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext; 
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>("Requests"); 

  • dbからDbContextからコンテキストクラスinherting。
  • Requests - DbSet<Request> Contextクラスで定義されています。
  • objectSet - ObjectQueryとして渡すことができます。
+5

AFAIKを使用すると、文字列をパラメータとして残すことができます。これにより、エラープロフェッショナルが少なくなります: 'objectContext.CreateObjectSet ();' –

2

正解 'ありがとうございました。これはちょうどあなたの答えを詳述することです。

private List<T> GetByCustomCriteria<T>(string criteria) where T: class 
{ 
    var objectContext = ((IObjectContextAdapter)_myModelEntities).ObjectContext; 
    //note: _myModelEntities is a DbContext in EF6. 
    var objectSet = objectContext.CreateObjectSet<T>(); 
    return new List<T>(objectSet.Where(criteria)); 
} 

そして、私は上記の記事はので、ここで送信するどのような基準の例で行うことができると思った例を示します:私はちょうどそれを共有するので、一般的なタイプでこれを行うために管理

//sample criteria for int field: 
var myClientById = GetByCustomCriteria<Client>("it.Id == 1");` 

//sample criteria for string field, note the single quotes 
var myClientByName = GetByCustomCriteria<Client>("it.Surname == 'Simpson'"); 
関連する問題