如下:
执行Query方法查询数据时,如果添加一个变量列表且在请求条件里面,添加keys.Contains(xxx)时,则在执行CustomCacheKey方法时,将会在ResolveLinqToObject方法中的return Like(MethodCall);时出现错误。
//Blog.Core/Blog.Core.Api/Controller/LoginController.cs 159行
//自行设置一个KEYS对象,在Query中添加一个 keys.Contains(d.uID.ToString()) 方法
var keys = new List() { "a", "b", "c" };
var user = await _sysUserInfoServices.Query(d => d.uLoginName == name && d.uLoginPWD == pass && d.tdIsDelete == false && keys.Contains(d.uID.ToString()));
//Blog.Core/Blog.Core.Extensions/CacheAOPbase.cs 82行
// 执行 return Like(MethodCall); 时,出现错误
private static string ResolveLinqToObject(Expression expression, object value, ExpressionType? expressiontype = null)
{
var MethodCall = expression as MethodCallExpression;
var MethodName = MethodCall.Method.Name;
switch (MethodName)
{
case "Contains":
if (MethodCall.Object != null)
return Like(MethodCall);
return In(MethodCall, value);
case "Count":
return Len(MethodCall, value, expressiontype.Value);
case "LongCount":
return Len(MethodCall, value, expressiontype.Value);
default:
throw new Exception(string.Format("不支持{0}方法的查找!", MethodName));
}
}
建议:
1.添加对上述问题的处理。
2.或许求取表达式KEY,只需要将表达式内容(left)及表达式外部参数(right)一次性取出进行组合即可保证唯一性了吧。因为对lambda表达式不是很懂,只能表达一个意思。