ユーザー入力に応じて動的なWHERE句を作成する必要があります。古いものを使用して、を使用ObjectContext
して方法を見つけました.Where(<ESql>)
。
Dim qry As ObjectQuery(Of MESSGROESSE)= _objContext.MESSGROESSE String.IsNullOrWhiteSpace(fltFormelzeichen.Text)でない場合は、 qry = qry.Where( "it.Formelzeichen LIKE @Formelzeichen"、New ObjectParameter( "Formelzeichen"、BuildESqlWildCard(fltFormelzeichen.Text))) 終了する場合 String.IsNullOrWhiteSpace(fltBezeichnung.Text)でない場合は、 qry = qry.Where( "it.Bezeichnung LIKE @Bezeichnung"、New ObjectParameter( "Bezeichnung"、BuildESqlWildCard(fltBezeichnung.Text))) 終了する場合
これは新しいプロジェクトであるため、通常は新しいDbContextを使用します。DbContextからObjectContextを取得する方法を知っています。
Private _objContext As ObjectContext = CType(_dbContext, IObjectContextAdapter).ObjectContext
しかし、それでは何ですか?
EDMXジェネレーターは、列名がテーブル名と同じであり、DBスキーマを制御できない場合、列名を破棄するため、オプションを使用するDbContext.Database.SqlQuery
か、オプションではないようです。EDMXジェネレーターによる列名の変更を停止する方法をObjectContext.CreateQuery
参照してください。
オープンソースソリューションへの依存は望んでいません。
追加した
その間、ワイルドカードが必要ないことを顧客に話したので、dbConctextでContains()を使用できます。
_dbc=新しいTPTEntities Dim qry As DbQuery(Of MESSGROESSE)= _dbc.MESSGROESSE qry = From e In _dbc.MESSGROESSE Take maxRows String.IsNullOrWhiteSpace(fltFormelzeichen.Text)でない場合は、 qry = From e In qry Where e.FORMELZEICHEN.Contains(fltFormelzeichen.Text) 終了する場合 String.IsNullOrWhiteSpace(fltBezeichnung.Text)でない場合は、 qry = From e In qry Where e.BEZEICHNUNG.Contains(fltBezeichnung.Text) 終了する場合 String.IsNullOrWhiteSpace(fltReihenfolge.Text)でない場合は、 qry = From e In qry Where e.REIHENFOLGE = fltReihenfolge.Text 終了する場合 qry.Load() 'TODOは_dbc.MESSGROESSE.Localであり、ここでデータを取得する正しい方法ですか? ucoGridEditor.grd.ItemsSource = _dbc.MESSGROESSE.Local
ただし、dbContextでESql Where()を使用する方法を知りたいのですが。