2010-09-28 35 views
2

我使用ADO.NET实体框架与几个数据访问层方法返回相同的域实体。让它成为:EF:我可以为lambda类转换实例吗?

PersonEntity GetById(int id) { 
    return db.Person.FirstOrDefault(x => new PersonEntity { Id = x.Id, Name = x.Name }); 
} 

IQueryable<PersonEntity> GetByName(string name) { 
    return db.Person.Where(x => x.Name == name).Select(x => new PersonEntity { Id = x.Id, Name = x.Name }); 
} 

e.t.c.:

class PersonEntity { 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

和方法,根据不同的标准返回Person实体代码块x => new PersonEntity { Id = x.Id, Name = x.Name }非常重复性(这是非常恼人的许多场实体),但我不能把它的单点,例如静态方法:

PersonEntity ConvertToPersonEntity(Person x) { 
    return new PersonEntity { Id = x.Id, Name = x.Name } 
} 

这样的外部函数调用不能转换成SQL运营商。有没有什么解决方法可以将转换保留在一个地方?

预先感谢您!

+0

使用非实体类型可能会编译失败。然而,你可以创建一个返回匿名对象初始化表达式的方法,但是如果从编译器的角度来看,这是完全可能的。 – leppie 2010-09-28 11:25:37

回答

3

是的,你可以这样做:

Expression<Func<Person, PersonEntity>> ConvertToPersonEntity() { 
    return x => new PersonEntity { Id = x.Id, Name = x.Name }; 
} 

...然后:

PersonEntity GetById(int id) { 
    var exp = ConvertToPersonEntity(); 
    return db.Person.FirstOrDefault(exp); 
} 
+0

谢谢您的回复,我明天再检查!如果作品会很棒! – 2010-09-28 12:57:57

相关问题