用匿名方法替换函数调用

问题描述

| 我觉得我好笨。你们可以帮我用匿名代替GetCamp(x)吗? 这段代码
   aspnet_Users.ForEach(x =>
        {
            usersVm.Add(new User{
                 Camp = Mapper.Map<DbCamp,Camp>(GetCamp(x)),});
        }); 


    private DbCamp GetCamp(aspnet_Users x)
    {
        //... some code ...
        return someDbCamp;
    }
应该是这样的:
   aspnet_Users.ForEach(x =>
    {
         usersVm.Add(new User{
              Camp = Mapper.Map<DbCamp,Camp>
              (
                    Func<DbCamp>(aspnet_Users u) => 
                    { 
                         //... some code ...
                          return someDbCamp;
                    }
               ),});
     }); 
那是行不通的,因为
Mapper.Map<Database.Camp,Camp>
需要对象
typeof(DbCamp)
作为参数,而不是委托。我当然可以使用正常的功能,但是从学术角度来看,我想知道这里是否可以使用匿名方法。     

解决方法

我认为这应该处理空洞的情况。
x => x.Users.Any() ? x.Users.First().Camp : null
在上下文中:
_dataContext.aspnet_Users.ToList().ForEach(x =>
    {
        usersVm.Add(new User{
             Camp = Mapper.Map<Database.Camp,Camp>(
                  x => x.Users.Any() ? x.Users.First().Camp : null),});
    }); 
    ,这不起作用:
x => GetCamp(x)
?     ,
aspnet_Users.ForEach(x =>
{
    usersVm.Add(new User{ Camp = Mapper.Map<DbCamp,Camp>({ /*... some code using x ...*/ return someDbCamp; }) });
});