按字符串给出的类型获取对象列表

时间:2012-11-07 11:38:25

标签: c# entity-framework generics types

我通过

获取对象
IEnumerable<ObjectStateEntry> om = context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified);        

如何使用字符串给出的类型获取List个对象?

Type typ = Type.GetType("mytype");
var om2 = om.Select(s => s.Entity).OfType<typ>(); // does not work

2 个答案:

答案 0 :(得分:4)

您尝试做的事情无法静态完成:var对应于表达式的静态类型,而右侧表达式的类型显然是非静态的(它是IEnumerable<T>,其中T在运行时之前是未知的。

然而,这是合法的:

var om2 = om.Select(s => s.Entity).Where(v => typ.IsInstanceOfType(v));

这会产生IEnumerable<ObjectStateEntry>

答案 1 :(得分:1)

怎么样

Type typ = Type.GetType("mytype");
var om2 = om.Select(s => s.Entity).Where(e=>typeof(e) == typ);

请注意,他将返回匹配类型完全匹配的匹配项(而不是位于同一继承树中)。