下面的表达式构建工作正常。如果subMember
是字符串,则没问题。
想象一下,现在我收到一个名为subMember
的{{1}},此Code
是Code
。在此,
我想制作一个Int32
,但我无法解析,因为它是StartWith
。我想,我必须这样做
转换为字符串。我该如何实现呢?
Ex:100,102,105,200,300,301,3011 ......
如果subMember =“10”,则结果为100,102,105
如果subMember =“30”,则结果为300,301,3011
如果subMember =“301”,则结果为301,3011
Int32
答案 0 :(得分:1)
由于StartsWith
只对字符串有意义,我要做的第一件事就是使用string value
简化事情。现在,在foreach
循环解析成员后,我们可以检查body
的类型:
if(body.Type != typeof(string)) body = Expression.Call(body, "ToString", null);
然后应用StartsWith
:
body = Expression.Call(body, "StartsWith", null, Expression.Constant(value));
然后创建lambda:
return Expression.Lambda<Func<T, bool>>(body, p);
然而!如果这是针对LINQ-to-EF / LINQ-to-SQL,则它将依赖于支持语法的库,例如:
.Where(x => x.Foo.Bar.ToString().StartsWith("1"))
因为那是正在构建的。此外,我不希望这适用于任何数据库索引;在文本以"1"
开头的那些搜索整数不是一个明显的索引操作。最后:注意负数等; -1
"1"
没有“开始”。