216 Star 1.4K Fork 445

老张的哲学 / Blog.Core

 / 详情

你好,现发现在CacheAOPbase中,当执行表达式方法,如有外部数据参与Contains运算时,则求取缓存KEY会出现错误

待办的
创建于  
2020-07-17 08:42

如下:
执行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表达式不是很懂,只能表达一个意思。

评论 (0)

hch 创建了任务
hch 关联仓库设置为老张的哲学/Blog.Core
展开全部操作日志

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
C#
1
https://gitee.com/laozhangIsPhi/Blog.Core.git
git@gitee.com:laozhangIsPhi/Blog.Core.git
laozhangIsPhi
Blog.Core
Blog.Core

搜索帮助