2009-06-18 16 views
2

..C#高度なクエリステートメントの文字列処理

ここでは一例です:

「[年齢] = 『37』そして[性別]は「2003/01/01」であり、「idnumber」はNullである(「saresident」= '52'または「abc%」のような市民権)」

Iこれを次のようなツリーに体現できるはずです:

{attribute='age', operator='=', value='37', opperand='And'} 
{attribute='gender', operator='Is Not Null', value='', opperand='And'} 
{attribute='optindate', operator='>', value='2003/01/01', opperand='And'} 

など....

どのような提案が素晴らしいでしょう!

+0

この表現はEAVスキーマのデータをクエリするために使用されることに言及する必要があります(コメントは入力しないでください)。したがって、これをExpressionTree(または何か)に構築して、必要なSQLクエリを再帰的に作成して構築する必要があります。 –

答えて

1

を見てみましょう。例: 年齢= 37と性別 が

と=年齢37として格納する必要がありますnullではない!=ジェンダーヌル

ので、木は

 and 
    =   != 
age 37 gender null 

ようにする必要がありますあなたはより多くの詳細については、これらのリンクを使用することができます:Notation Used for OperationsExpressions, Conversion and Evaluation with C (All you need to know about Expressions)

+0

上記の私のコメントによると、私は残念ながら、filtercontrolが返す文字列を制御することはありませんか? –

+1

いいえ、私はあなたが文字列を変更することを示唆していません。私の提案は、ツリー構造が接頭辞記法を使用するべきであるということです。私。 'と'はrootでなければならない '、' = '、'!= '、' and 'などの子。すべてのオペランドは、それぞれの演算子のリーフノードと子でなければなりません。したがって、式を評価する必要がある場合は、それに応じてツリーを解析する必要があります。 –

+0

ああ、これは間違いなくこのことを念頭に置いています。ありがとう! –

1

dynamic LINQ libraryはどうですか? "そのまま"使うか、それがどのようにしてExpression<Func<T,bool>>述語(木です)を構築するかを見てください。

+0

問題は、文字列が独自のフィルタコントロールによって生成されることです。私は刺し網を表現木のようなものに変換する必要がありますか? –

1

を使用すると、ツリー構造で操作を格納する必要がある場合、あなたは接尾またはプレフィックス表記を使用する必要がありますRegular Expressions

関連する問題