Entity framework 实体框架中的自动投影

Entity framework 实体框架中的自动投影,entity-framework,c#-4.0,reflection,extension-methods,projection,Entity Framework,C# 4.0,Reflection,Extension Methods,Projection,在实体框架中是否有创建自动投影的方法?请参见: public class Person{ public int Id {get; set;} public string FirstName {get; set;} public string LastName {get; set;} public string FatherName {get; set;} public string City {get; set;} public str

在实体框架中是否有创建自动投影的方法?请参见:

public class Person{ 
    public int Id {get; set;} 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public string FatherName {get; set;} 
    public string City {get; set;} 
    public string AddressLine {get; set;} 
    public string Something {get; set;} 
}

public class PersonNameModel{
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public string FatherName {get; set;} 
}

public class PersonAddressModel{
    public string City {get; set;} 
    public string AddressLine {get; set;} 
}

// etc...
我的意思是我可以替换正常投影,比如:

context.Persons.Select(t => new PersonNameModel{ FirstName = t.FirstName /* etc */ });
public static class MyExtensions{
    public static IQueryable<T> AutoSelect<T, TProject>(this IQueryable<T> q){
        // read TProject type in reflection
        // create a projection as a IQueryable<T> 
    }
}
使用可使用反射并创建自动投影的扩展方法,如:

context.Persons.Select(t => new PersonNameModel{ FirstName = t.FirstName /* etc */ });
public static class MyExtensions{
    public static IQueryable<T> AutoSelect<T, TProject>(this IQueryable<T> q){
        // read TProject type in reflection
        // create a projection as a IQueryable<T> 
    }
}
公共静态类MyExtensions{
公共静态IQueryable自动选择(此IQueryable q){
//读取反射中的项目类型
//将投影创建为IQueryable
}
}

有办法吗?我在谷歌上搜索了一下,但没有找到任何资源。您能指导我吗?

如果我正确理解您想要的是对象之间的映射,请使用Automapper,它将为您进行映射


git hub路径是的,可以将实体框架实体自动投影到某些Dto。请参见此处的一个实现

您可以将其用作:

context.Persons.Project().To<PersonNameModel>().ToList();
context.Persons.Project().To().ToList();
在这种情况下,将生成db查询以仅选择所需的列(由PersonNameModel指定)


如果您只想映射查询结果(即检索到的对象),那么EmitMapper或AutoMapper应该是您的选择

太好了。多谢各位