使用Contains的Cosmos DB查询问题

时间:2019-12-06 08:53:42

标签: asp.net-mvc linq c#-4.0 azure-functions azure-cosmosdb

包含整数的搜索包含谓词子句。

我生成了如下的linq表达式

如果该字段是字符串字段,则可以正常工作。

{f => (True AndAlso f.MyStringField.Contains("987"))}

但是当我将其转换为字符串时,这不起作用。例如,我有一个整数字段,例如myIntField。

{f => (True AndAlso f.XYZ.myIntField.ToString().Contains("160"))}

我添加了用于获取查询的代码。似乎某些toString()在某个地方被覆盖,

if (propr.Type == typeof(string))
{
    var body = Expression.Call(propr, method, value);
    var lambda = Expression.Lambda<Func<T, bool>>(body, param);
    predicate = predicate.And(lambda);
}
else
{
    MethodInfo toStringMethod = typeof(object).GetMethod("ToString" );
    MethodInfo methodinfo = typeof(string).GetMethod("Contains", new Type[] { });
    value = Expression.Constant(property.Value);
    var memberToStringBody = Expression.Call(propr, toStringMethod);
    var body = Expression.Call(memberToStringBody, methodinfo, value);
    var lambda = Expression.Lambda<Func<T, bool>>(body, param);
    predicate = predicate.And(lambda);
}

0 个答案:

没有答案