首页 新闻 会员 周边

如何在这两段代码中提取一个公共方法?

1
悬赏园豆:10 [已解决问题] 解决于 2015-12-20 13:03
        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")来格式化,这种情况应该怎么处理好呢?

逐影的主页 逐影 | 小虾三级 | 园豆:982
提问于:2015-12-19 21:14
< >
分享
最佳答案
1

提取表达式就好嘞。再往后就是把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;
}
收获园豆:10
古月三石 | 菜鸟二级 |园豆:259 | 2015-12-20 10:39

非常感谢~之前看官网动态构建Lambda表达式的例子没看懂,你的这个很清晰。

逐影 | 园豆:982 (小虾三级) | 2015-12-20 13:02
其他回答(2)
0

简单使用一个map对象作为参数传递,其中key 和val 都穿进来 而不是像现在这样只传递val 

Acmen | 园豆:173 (初学一级) | 2015-12-19 23:24

这是Controller的action,好像没办法用map对象。

 

支持(0) 反对(0) 逐影 | 园豆:982 (小虾三级) | 2015-12-20 00:40
0

我不会,但我对这个问题感兴趣。顶了一下问题,等待答案的揭晓。

[0] | 园豆:1257 (小虾三级) | 2015-12-20 08:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册