C# 使用投影填充EF中未映射的类型

C# 使用投影填充EF中未映射的类型,c#,entity-framework,projection,C#,Entity Framework,Projection,我们有一个名为Measure的特定结构,我们希望使用这种类型,而不是数据库字段类型,例如double 因此,我们有一个实体: public class MyEnity { public int MyValue { get; set; } } 我们有一个转移对象: 公共类MyDto { 公共度量值MyMeasureValue{get;set;} } 如果属性类型匹配,我们只需填写每个投影的dto即可: enities.Select(i => new MyDto { MyMeasure

我们有一个名为Measure的特定结构,我们希望使用这种类型,而不是数据库字段类型,例如double

因此,我们有一个实体:

public class MyEnity
{
   public int MyValue { get; set; }
}
我们有一个转移对象: 公共类MyDto { 公共度量值MyMeasureValue{get;set;} }

如果属性类型匹配,我们只需填写每个投影的dto即可:

enities.Select(i => new MyDto { MyMeasureValue = new Measure(i.MyValue, _unitsService.GetUnit("km")) });
但由于EF不支持此类声明,我们必须重新填充该声明,或加载整个实体:

entities.Select(i => new { MyValue = i.MyValue })
        .AsEnumerable()
        .Select(i => new MyDto { MyMeasureValue = new Measure(i.MyValue, _unitsService.GetUnit("km")) } );
我们希望避免在重新填充过程中多次出现这种循环,特别是因为有很多属性需要填充。我们是否可以使用第一个语句并教EF执行度量创建?(例如拦截等)

另外,创建EF复杂类型并映射它不是一个选项


感谢Enyra

在使用Linq实体获取实体的某些属性时,您可以使用复杂类型。比如,

Model1Container container = new Model1Container();
var temp = from o in container.MasterSet
           select new
                  {
                       x = o.LastModifiedBy,
                       y = o.LastModifiedDate
                  };

顺便说一下,与其手动映射DTO,不如使用autommaper。它具有映射匹配专有名称的功能,而无需明确声明。

Complexe类型是不可选项的,因为我们的类型是并且必须是一个结构。Automapper可能是一个解决方案,我必须澄清这一点。