【问题标题】:C# and entity framework - Casting object which is List<DynamicProxies...> to List<Entity>C# 和实体框架 - 将 List<DynamicProxies...> 的对象转换为 List<Entity>
【发布时间】:2016-12-26 21:23:56
【问题描述】:

场景:我有一组使用延迟加载的实体框架实体,因此是DynamicProxies。然后有一种方法可以将一些选定的项目传递给我写为object 的覆盖。我需要将List&lt;DynamicProxies.EntityABCD&gt;(实际上以object 传递)转换为List&lt;Entity&gt;

但是以这种方式投射列表

dropInfo.Data as List<MyEntity>

将返回 null。我什至不能使用通用方法Cast&lt;T&gt;,因为源列表再次作为object 传递。

我也试过了

dropInfo.Data as List<object>

但它仍然会返回 null。

提前致谢

编辑:设法获得更清晰的清单

((IList)dropInfo.Data).Cast<MyEntity>()

但是我仍然需要检查错误等。

【问题讨论】:

  • 你打算用那个List做什么?一些协变接口(如IEnumerable&lt;MyEntity&gt;IReadOnlyList&lt;MyEntity&gt;)不能为你工作吗?
  • 现在我明白你的问题了。在将List&lt;Proxy_123&gt; 传递给dragInfo 之前,是否可以将其转换为List&lt;MyEntity&gt;?我怀疑您必须以某种方式存储为 dragInfo 提供某些东西(您的列表),因此当您拖放时它可以在 dropInfo.Data 中传回,这样您就可以在之前投射它。

标签: c# entity-framework list generics converter


【解决方案1】:

如果你知道你的对象结构,你可以使用 dynamic 量词:

var result = ((List<dynamic>)dropInfo.Data).Select(ConvertToMyEntityMethod).ToList();

public static MyEntity ConvertToMyEntity(dynamic obj)
{
     return new MyEntity(){ SomeIntProperty = (int)obj.SomeIntProperty };
}

Dynamic 允许您通过反射访问类成员而不会出现编译错误。这对于性能来说确实是一个糟糕的解决方案,但如果您使用 MVVM 绑定,则非常好。

【讨论】:

  • 虽然这看起来适合我的情况,但不幸的是,转换为 List 不起作用,而转换为非泛型 List 会出于某种原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多