ユーザー入力に応じて動的な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()を使用する方法を知りたいのですが。