使用Linq Select创建新的继承对象

时间:2015-11-20 20:13:27

标签: c# entity-framework linq inheritance

我有2个课程,UserExtendedUserExtendedUser继承自User,只添加了2个int字段 - 没什么特别的。

我有一个User个对象列表 - List<User>,并希望查看列表并创建一个ExtendedUser个对象列表,我只想填写填写缺少的int字段。

我考虑使用Linq的Select方法创建新对象,但它不会将User复制到ExtendedUser - 所以我需要重新创建那些对我来说没有意义的对象。

编辑:

User是一个实体,其中ExtendedUser是从该实体继承的自定义类(但不是实体本身)。

这里最简单的解决方案似乎是构图,虽然在概念上 - 继承会更好。

这里有任何智能解决方案吗? :)

谢谢!

1 个答案:

答案 0 :(得分:3)

  

... Linq创建新对象,但它不会将用户复制到ExtendedUser - 所以我需要重新创建那些对我来说没有意义的对象。

这不是Linq的缺点。

强类型OOP中的一般原理是您不能简单地将基类对象转换为派生对象。这样的转换总是涉及复制成员并引发身份问题(哪个克隆是真实的?)。

换句话说,当一个对象应该属于B类时,它应该永远不会像A类那样开始生命,即使B来自A,所以要重新审视你的设计和整体解决方案。

如果你仍然认为自己需要这个,那么你所拥有的就是将实体转换为DTO,反之亦然。您可以使用AutoMapper等常用工具。