public Object Get(int id) { var result = db.userInfo.Where(a => a.UserID == id) .Select(a => new { userid = a.UserID, username = a.UserName, registertime = a.RegisterTime }).FirstOrDefault(); return result; }
public Object Get(string username) { var result = db.userInfo.Where(a => a.UserName == username) .Select(a => new { userid = a.UserID, username = a.UserName, registertime = a.RegisterTime }).FirstOrDefault(); return result; }
这两段代码相似度90%,只有高亮的代码和传入的参数类型不同,请问怎么提取一个公共方法?
另外
registertime = a.RegisterTime
无法用a.RegisterTime.ToString("yyyy-MM-dd")来格式化,这种情况应该怎么处理好呢?
提取表达式就好嘞。再往后就是把UserInfo提取成泛型,封装表达式树。
public Object Get(string username) { return GetExpression(a => a.UserName == username); } public Object Get(string id) { return GetExpression(a => a.UserId == id); } public Object GetExpression(Expression<Func<UserInfo, bool>> criteria) { var result = db.userInfo.Where(criteria) .Select(a => new { userid = a.UserID, username = a.UserName, registertime = a.RegisterTime }).FirstOrDefault(); return result; }
非常感谢~之前看官网动态构建Lambda表达式的例子没看懂,你的这个很清晰。
简单使用一个map对象作为参数传递,其中key 和val 都穿进来 而不是像现在这样只传递val
这是Controller的action,好像没办法用map对象。
我不会,但我对这个问题感兴趣。顶了一下问题,等待答案的揭晓。