c# 如何在 returns 字符串的表达式中计算 compareTo(..)
c# How to evaluate compareTo(..) in Expression which returns a string
我和这里有类似的情况:How to declare a Linq Expression variable in order to have it processed as a dbParameter
但在我的例子中,不想与 'equal' 运算符进行比较,我需要将一个字符串与另一个字符串进行比较。我怎样才能做到这一点?
我试过这样的事情:
var comparsionString = "aaa";
ParameterExpression param = Expression.Parameter(typeof(ItemSearch), "s");
Expression prop = Expression.Property(param, "Id");
Expression<Func<string>> idLambda = () => comparsionString;
Expression searchExpr = Expression.GreaterThanOrEqual(prop, idLambda.Body);
Expression<Func<ItemSearch, bool>> myLambda =
Expression.Lambda<Func<ItemSearch, bool>>(searchExpr, param);
但不幸的是,字符串不支持 GreaterThanOrEqual。所以我需要 string.CompareTo(..) 方法,它至少被 SQL 支持到 Entities.
说:
Expression searchExpr = Expression.IsTrue(*prop*.CompareTo(*idLambda*) >= 0);
如何以编译器可以理解的方式编写?
感谢任何帮助。
谢谢!
如果您调查
的编译器翻译
Expression<Func<string, bool>> f = s => s.CompareTo("aaaa") >= 0;
你会发现你需要使用 GreaterThanOrEqual(Call("s", "CompareTo", "aaaa")) 所以创建的代码是:
var comparsionString = "aaa";
ParameterExpression param = Expression.Parameter(typeof(ItemSearch), "s");
Expression prop = Expression.Property(param, "Id");
Expression<Func<string>> idLambda = () => comparsionString;
var CallMethod = typeof(string).GetMethod("CompareTo", new[] { typeof(string) });
Expression callExpr = Expression.Call(prop, CallMethod, idLambda.Body);
Expression searchExpr = Expression.GreaterThanOrEqual(callExpr, Expression.Constant(0));
Expression<Func<ItemSearch, bool>> myLambda =
Expression.Lambda<Func<ItemSearch, bool>>(searchExpr, param);
我和这里有类似的情况:How to declare a Linq Expression variable in order to have it processed as a dbParameter
但在我的例子中,不想与 'equal' 运算符进行比较,我需要将一个字符串与另一个字符串进行比较。我怎样才能做到这一点?
我试过这样的事情:
var comparsionString = "aaa";
ParameterExpression param = Expression.Parameter(typeof(ItemSearch), "s");
Expression prop = Expression.Property(param, "Id");
Expression<Func<string>> idLambda = () => comparsionString;
Expression searchExpr = Expression.GreaterThanOrEqual(prop, idLambda.Body);
Expression<Func<ItemSearch, bool>> myLambda =
Expression.Lambda<Func<ItemSearch, bool>>(searchExpr, param);
但不幸的是,字符串不支持 GreaterThanOrEqual。所以我需要 string.CompareTo(..) 方法,它至少被 SQL 支持到 Entities.
说:
Expression searchExpr = Expression.IsTrue(*prop*.CompareTo(*idLambda*) >= 0);
如何以编译器可以理解的方式编写?
感谢任何帮助。 谢谢!
如果您调查
的编译器翻译Expression<Func<string, bool>> f = s => s.CompareTo("aaaa") >= 0;
你会发现你需要使用 GreaterThanOrEqual(Call("s", "CompareTo", "aaaa")) 所以创建的代码是:
var comparsionString = "aaa";
ParameterExpression param = Expression.Parameter(typeof(ItemSearch), "s");
Expression prop = Expression.Property(param, "Id");
Expression<Func<string>> idLambda = () => comparsionString;
var CallMethod = typeof(string).GetMethod("CompareTo", new[] { typeof(string) });
Expression callExpr = Expression.Call(prop, CallMethod, idLambda.Body);
Expression searchExpr = Expression.GreaterThanOrEqual(callExpr, Expression.Constant(0));
Expression<Func<ItemSearch, bool>> myLambda =
Expression.Lambda<Func<ItemSearch, bool>>(searchExpr, param);