【发布时间】:2021-04-09 10:02:14
【问题描述】:
我有一个使用这种语法从反射中得到的变量(property 是一个字符串):
T entity = DbContext.Set<T>()
.Include(property)
.FirstOrDefault(x => x.Id == key);
var navPropertyCollection = Properties
.FirstOrDefault(p => p.Name == property)
?.GetValue(entity);
navPropertyCollection 是一个对象,但在一个类中它被声明为ICollection<MyClass> 并初始化为List<MyClass>。这是有效的:
var navPropertyCollection = Properties
.FirstOrDefault(p => p.Name == property)
?.GetValue(entity) as List<MyClass>;
但我不知道 MyClass(而且根本不需要这个方法)!我只知道它是 MyBaseClass 的孩子。
我需要将它转换成ICollection<dynamic>、ICollection<object>、ICollection<MyBaseClass>、List<dynamic>、List<object> 或 List<MyBaseClass> 之类的东西。但是这些演员表不起作用。
转换为IEnumerable<object> 或IEnumerable<MyBaseClass> 有效,但这不是选项,因为稍后我需要调用方法Add(),并且我的DbContext 中没有标记更改。
【问题讨论】:
-
您确定转换为非泛型
IList不起作用吗?我希望这能奏效,并允许您稍后致电Add。 -
@JonSkeet 我忘记了非泛型 IList。请作答。非常感谢!
标签: c# collections casting entity-framework-core .net-5