【问题标题】:Entity Framework OfType() dynamicallyEntity Framework OfType() 动态
【发布时间】:2012-05-12 21:30:04
【问题描述】:

你怎么办:

Type ty = Type.GetType("Student");
var students = db.People.OfType(ty);

以一种可行的方式?

为什么?

我只以人/学生为例,这里稍微详细解释一下我为什么要这样做。

我希望能够将邮政地址信息存储在与特定文化相关的关系结构中。我的想法是有一个基本类型:“地址”并继承它的类型,例如:“UK_Address”。然后我的“人”实体将只有一个“地址”参考。我会将特定地址类型的名称作为字符串存储在 Person 类型中,并使用此名称来指示程序在与地址交互时的行为。

如果这有意义!? :s

【问题讨论】:

  • 你想用这个做什么?如果您尝试在继承的类之间做出改变,那么在 EF 中会有更好的方法来做到这一点。
  • 我已经编辑了原帖...

标签: c# entity oftype


【解决方案1】:

如果您正在寻找以下方面的答案:

Type ty = ...
var students = db.People.OfType<ty>(); //Doesn't work, see below

那么我认为没有反思就行不通。见

IQueryable OfType<T> where T is a runtime Type

【讨论】:

  • .ofType 真的不起作用。它可以编译。 “IsSubclassOf”不存在。
  • 我不明白您的评论,我说 .ofType 没有反射就无法工作,并且 Type.IsSubclassOf 确实存在。它实际上是 IsAssignableFrom 的反面:msdn.microsoft.com/en-us/library/system.type.issubclassof.aspx
  • 抱歉 - 我想念 .NET 4 中的“IsSubclassOf”。但是 - “IsSubclassOf”仅适用于类。没有结构或接口。 “OfType()”是非常糟糕的方法。反射有办法做到这一点,但确实复杂且效率低下。最好不要建议非功能性或半功能性解决方案。
  • 啊,谢谢,如果 c 和 ty 代表同一个类,我也错过了 c.IsSubclassOf(ty) 也返回 false。 IsAssignableFrom 更好。
【解决方案2】:
Type ty = typeof(Student); // tyopeof() is "safer" than Type.GetType()
var students = db.People.Where(x=>ty.IsAssignableFrom(x.GetType()));

【讨论】:

  • OfType 可转换为 SQL。 EF 支持这种方式的继承。
猜你喜欢
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 2022-08-20
  • 1970-01-01
  • 2011-11-11
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多