代码之家  ›  专栏  ›  技术社区  ›  Andrew Florko

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

  •  2
  • Andrew Florko  · 技术社区  · 15 年前

    我用ADO.NET实体框架,包含返回同一域实体的多个数据访问层方法。顺其自然:

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

    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 回复  |  直到 15 年前
        1
  •  3
  •   Craig Stuntz    15 年前

    是的,你可以做:

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