C# 有没有办法用AutoMapper进行过滤?

C# 有没有办法用AutoMapper进行过滤?,c#,properties,mapping,filtering,automapper,C#,Properties,Mapping,Filtering,Automapper,晚上好 我目前正在寻找一种在将对象发送到我的存储库之前“过滤”对象的方法;也就是说,保留原始实例中的某些属性,同时忽略其他属性或使用默认值替换其他属性,具体取决于上下文。事实上,我相信这可能是一种替代所有DTO的方法,在这种情况下,类型转换是不必要的,同时保护我的应用程序不被“过度发布”,如上所述 换句话说,我要做的是替换: public class UserRegistrationModel { public string FirstName { get; set; } pub

晚上好

我目前正在寻找一种在将对象发送到我的存储库之前“过滤”对象的方法;也就是说,保留原始实例中的某些属性,同时忽略其他属性或使用默认值替换其他属性,具体取决于上下文。事实上,我相信这可能是一种替代所有DTO的方法,在这种情况下,类型转换是不必要的,同时保护我的应用程序不被“过度发布”,如上所述

换句话说,我要做的是替换:

public class UserRegistrationModel {
    public string FirstName { get; set; }
    public string Gender { get; set; }
    public string LastName { get; set; }
}

public class UserGenderEditModel {
    public string Gender { get; set; }
}

public class User {
    public string FirstName { get; set; }
    public string Gender { get; set; }
    public bool IsVIP { get; set; }
    public string LastName { get; set; }
}

class Program {
    static void Main(string[] args) {
        Mapper.CreateMap<UserRegistrationModel, User>()
            .ForMember(d => d.FirstName, o => o.MapFrom(s => s.FirstName))
            .ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
            .ForMember(d => d.IsVIP, o => o.UseValue(false))
            .ForMember(d => d.LastName, o => o.MapFrom(s => s.LastName));

        Mapper.CreateMap<UserGenderEditModel, User>()
            .ForMember(d => d.FirstName, o => o.Ignore())
            .ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
            .ForMember(d => d.IsVIP, o => o.Ignore())
            .ForMember(d => d.LastName, o => o.Ignore());

        var user = Mapper.Map<UserRegistrationModel, User>(new UserRegistrationModel {
            // filling properties
        });
    }
}
公共类用户注册模型{
公共字符串名{get;set;}
公共字符串{get;set;}
公共字符串LastName{get;set;}
}
公共类UserGenderEdit模型{
公共字符串{get;set;}
}
公共类用户{
公共字符串名{get;set;}
公共字符串{get;set;}
公共bool IsVIP{get;set;}
公共字符串LastName{get;set;}
}
班级计划{
静态void Main(字符串[]参数){
Mapper.CreateMap()
.ForMember(d=>d.FirstName,o=>o.MapFrom(s=>s.FirstName))
.ForMember(d=>d.Gender,o=>o.MapFrom(s=>s.Gender))
.ForMember(d=>d.IsVIP,o=>o.UseValue(false))
.ForMember(d=>d.LastName,o=>o.MapFrom(s=>s.LastName));
Mapper.CreateMap()
.ForMember(d=>d.FirstName,o=>o.Ignore())
.ForMember(d=>d.Gender,o=>o.MapFrom(s=>s.Gender))
.ForMember(d=>d.IsVIP,o=>o.Ignore())
.ForMember(d=>d.LastName,o=>o.Ignore());
var user=Mapper.Map(新用户注册模型{
//填充特性
});
}
}
用这样的东西(当然不行了!):

公共类用户{
公共字符串名{get;set;}
公共字符串{get;set;}
公共bool IsVIP{get;set;}
公共字符串LastName{get;set;}
}
班级计划{
静态void Main(字符串[]参数){
Mapper.CreateMap()
.ForMember(d=>d.FirstName,o=>o.MapFrom(s=>s.FirstName))
.ForMember(d=>d.Gender,o=>o.MapFrom(s=>s.Gender))
.ForMember(d=>d.IsVIP,o=>o.UseValue(false))
.ForMember(d=>d.LastName,o=>o.MapFrom(s=>s.LastName))
.ForContext(“用户注册”);//不真实。
Mapper.CreateMap()
.ForMember(d=>d.FirstName,o=>o.Ignore())
.ForMember(d=>d.Gender,o=>o.MapFrom(s=>s.Gender))
.ForMember(d=>d.IsVIP,o=>o.Ignore())
.ForMember(d=>d.LastName,o=>o.Ignore());
.ForContext(“UserGenderEdition”);//不真实。
var user=Mapper.Map(新用户{
//填充特性
},“UserRegistration”);//不真实。
}
}
那么,有没有一种方法可以完成这项工作(不一定是使用AutoMapper)

尽管如此,我并不是在寻找与MVC模型绑定机制直接相关的东西,因为我希望在web服务或控制台应用程序中重用它


谢谢

我不知道您为什么要这样做,但我认为最好的方法是使用多个子对象来满足您的需要

e、 g

公共类用户
{
公共虚拟字符串名
{
得到;
设置
}
公共虚拟字符串
{
得到;
设置
}
}
公共类UserGender:User
{
公共重写字符串名
{
得到
{
返回字符串。空;
}
设置
{
}
}
}
Mapper.CreateMap()
.ForMember(d=>d.FirstName,o=>o.Ignore())
.ForMember(d=>d.Gender,o=>o.MapFrom(s=>s.Gender));
您甚至可能不需要覆盖,只需使用不同的配置即可

public class User {
    public string FirstName { get; set; }
    public string Gender { get; set; }
    public bool IsVIP { get; set; }
    public string LastName { get; set; }
}

class Program {
    static void Main(string[] args) {
        Mapper.CreateMap<User, User>()
            .ForMember(d => d.FirstName, o => o.MapFrom(s => s.FirstName))
            .ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
            .ForMember(d => d.IsVIP, o => o.UseValue(false))
            .ForMember(d => d.LastName, o => o.MapFrom(s => s.LastName))
            .ForContext("UserRegistration"); // not real.

        Mapper.CreateMap<User, User>()
            .ForMember(d => d.FirstName, o => o.Ignore())
            .ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
            .ForMember(d => d.IsVIP, o => o.Ignore())
            .ForMember(d => d.LastName, o => o.Ignore());
            .ForContext("UserGenderEdition"); // not real.

        var user = Mapper.Map<User, User>(new User {
            // filling properties
        }, "UserRegistration"); // not real.
    }
}
public class User
{

    public virtual string Name
    {
        get;
        set;
    }

    public virtual string Gender
    {
        get;
        set;
    }
}

public class UserGender : User
{
    public override string Name
    {
        get
        {
            return string.Empty;
        }
        set
        {
        }
    }
}

Mapper.CreateMap<User, UserGender>()
        .ForMember(d => d.FirstName, o => o.Ignore())
        .ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender));