我使用ADO.NET Entity Framework和几个返回相同域实体的数据访问层方法。让它成为:
class PersonEntity {
public int Id { get; set; }
public string Name { get; set; }
}
和方法按不同的标准返回Person实体:
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。代码块x => new PersonEntity { Id = x.Id, Name = x.Name }
非常重复(对于许多字段实体来说非常烦人)但是我无法将它放在单个点上,例如静态方法:
PersonEntity ConvertToPersonEntity(Person x) {
return new PersonEntity { Id = x.Id, Name = x.Name }
}
这样的外部函数调用无法转换为SQL运算符。这里有什么解决方法可以将转换保存在一个地方吗?
提前谢谢!
答案 0 :(得分: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);
}