3

API を使用せずに、動的な Lambda 式クエリに取り組んでいます。

ユーザーが FieldName として「AddressLine1」を選択し、Operator として >= FieldValue として「K」を選択した場合、K および L、M から Z シリーズまでのすべての AddressLine1 フィールド値として結果が返されます。

コードは次のとおりです。整数データ型で機能します。

public static Expression CreateBinaryExpression(Expression argLeft, Expression argRight, operatorType opType) {
    switch ((operatorType)opType) {    
        case operatorType.Greater:
            return Expression.GreaterThan(argLeft, argRight);
        case operatorType.GreaterEqual:
            return Expression.GreaterThanOrEqual(argLeft, argRight);
        ...
    }
}

Greater than Equal 演算子の String データ型で動作するようにコードを変更する方法。その表現を求めています。誰にもアイデアがありますか?

4

2 に答える 2

3

String.Compare()次の方法を使用できます。

return String.Compare(argLeft, argRight) >= 0;

Compare()strA が strB より小さい場合は <0、等しい場合は 0、strA が strB より大きい場合は >0 を返します。

于 2012-09-12T06:22:45.410 に答える
0

ここから解決策を得ました

式ツリーを使用した動的なLinq 2 Sqlで例外「二項演算子LessThanがSystem.StringおよびSystem.Stringに対して定義されていません」が発生する

switch ((operatorType)opType) {

 case operatorType.Greater: return Expression.GreaterThan(
                            Expression.Call(typeof(string),
                            "Compare", null, new[] { argLeft, argRight }),
                             Expression.Constant(0, typeof(int)));

} 
于 2012-09-12T08:40:16.650 に答える