EF:我可以为lambda到类实例转换有单点吗?

时间:2010-09-28 11:06:47

标签: .net linq entity-framework

我使用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运算符。这里有什么解决方法可以将转换保存在一个地方吗?

提前谢谢!

1 个答案:

答案 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);
}