我们有一个名为Measure的特定结构,我们想使用这种类型而不是数据库字段类型,例如双
所以我们有一个实体:
public class MyEnity
{
public int MyValue { get; set; }
}
我们有一个转移对象: 公共课MyDto { public Measure MyMeasureValue {get;组; } }
如果属性类型匹配,我们只需填写每个投影的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执行Measure创建? (例如拦截等)
PS。创建EF复杂类型并映射它不是一个选项!
感谢Enyra
答案 0 :(得分:0)
您可以在使用Linq-Entity获取实体的某些属性时使用复杂类型。例如;
Model1Container container = new Model1Container();
var temp = from o in container.MasterSet
select new
{
x = o.LastModifiedBy,
y = o.LastModifiedDate
};
顺便说一下,不要手动映射DTOS,最好使用autommaper。它具有映射匹配专有名称而无需明确声明的功能。