下面的表达式生成器正常工作。如果subMember
是一个字符串,则没有问题。表达式在Int32字段中创建一个带有StartWith的谓词
现在想象一下,我收到一个名为subMember
Code
,这Code
是Int32
。在此, 我想作一个StartWith
,但我无法解析,因为它是Int32
。我想,我必须 转换为一个字符串。我怎样才能实现呢?
实施例:100,102,105,200,300,301,3011 ...
如果亚段= “10”,其结果是100102105
如果亚段= “30”,则结果为300,301,3011
如果亚段=“301”,结果是301,3011
private static Expression<Func<T, bool>> BuildPredicate<T>(string member, object value)
{
var p = Expression.Parameter(typeof(T));
Expression body = p;
foreach (var subMember in member.Split('.'))
{
body = Expression.PropertyOrField(body, subMember);
}
return Expression.Lambda<Func<T, bool>>(
Expression.Equal(body, Expression.Constant(value, body.Type)), p);
}
我同意代码字段类型...但有时我不能决定。关于您的解决方案身体看起来不错,但“StartWith”行有一个例外:System.InvalidOperationException:没有方法'StartsWith'类型'System.String' – 2013-03-19 12:35:45
@ Kris-I和什么是'价值'在这个时候?一个字符串?一个int?要么...? (请记住:我在第一段中说过我使用'value'作为'string') – 2013-03-19 12:38:36
值为10,我添加一个字符串并且看起来不错。让我试试更多 – 2013-03-19 12:43:09