【问题标题】:Entity Framework select and exclude field from Entity class实体框架从实体类中选择和排除字段
【发布时间】:2014-08-15 23:05:34
【问题描述】:

在 EF 中,这个查询给了我匿名类 List<anonymous{}>。有没有其他方法可以得到结果为 List<Parent>。或者有没有办法从父类和子类中排除select 中的属性

db<Parent>
      .Select(o => new { o.ID, Childs = o.Childs.Select(t => new { t.ID }) })
      .ToList()

【问题讨论】:

  • 这是XY Problem。在您描述您认为需要此功能的原因之前,我对此表示反对。 (然后我很可能会投票)。
  • @ErikPhilips:有点不同意。问题是它返回一个匿名对象而不是强类型对象。他真的需要说明他想要这样做的理由吗?这不是一个黑白问答网站吗?
  • @MikeCole 这绝对不是非黑即白。我建议阅读XY Problem 是什么。很多很多.. 很多问题都在询问为什么特定的正则表达式语句不起作用,而答案甚至不需要正则表达式开始。

标签: c# entity-framework


【解决方案1】:

是的,将其投影到父对象而不是匿名对象中。

db<Parent>
.Select(o =>
       new Parent{ o.ID,
                   Childs = o.Childs.Select(t => new { t.ID })
                 }
       ).ToList();

转念一想: 如果您没有使用 Parent 类返回每个属性,[意见警告] 您应该改为投影到 DTO 中,因为您必须管理/记住哪些字段正在加载,哪些没有。那是维护的噩梦。 [/意见提醒]

【讨论】:

  • 但此时 Child 对 Parent 对象的引用将是 null
  • 假设 Parent 有一个无参数的 ctor 并且不是来自 [受保护的] POCO 库。 ;; [opinion] 的后续行动,取决于规模(以及 [OP] 执行此操作的频率),AutoMapper 之类的东西可能值得一看。
  • @Horizo​​n,恕我直言,您与 ORM 的战斗太过分了。你想完成什么?
【解决方案2】:

您没有指定需要此行为的环境,但它在 MVC 中很常见。

如果您询问的是 MVC,那么您可能需要将结果序列化为 json。

如果是这种情况并为复杂的情况创建特定的选择,那么...

(我知道 - 很多 IF,我的回答可能不适用,但仍然 :)

...看看custom ContractResolver 的实现。

【讨论】:

    【解决方案3】:

    或者有没有办法从父类和子类中排除select中的属性。

    ,您不能选择/返回强类型实体框架对象,同时排除该对象的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多