EF 5将一个集合转换为另一个集合
本文关键字:集合 一个 转换 另一个 EF | 更新日期: 2023-09-27 17:59:09
我有一个组件,它接受两种类型作为数据源
public interface Ia
{
....
ICollection<Ib> Detail{ get; set; }
}
public interface Ib
{
....
}
然后我有两个EF类来实现接口
public class b:Ib
{
}
这就是我的问题。如何将MyDetail转换为Detail并将Detail转换成MyDetail,我正在尝试使用Detail来封装MyDetail
public class a : Ia
{
public virtual ICollection<b> MyDetail{get;set;}
// How to cast MyDetal to Detail and Detail to MyDetail
// Something like
public virtual ICollection<Ib> Detail
{
get {return MyDetail;}
set {MyDetail = value;}
}
}
这可能吗?有另一个合适的人来进行这次对话吗?
您不能这样做。ICollection
不是协变的,因此不能将ICollection<b>
视为ICollection<Ib>
(在getter中),它也不是逆变的,因此无法将ICollection<Ib>
视为ICollection<b>
(在setter中)。ICollection<T>
是不变量。(注意,任何事物都不可能同时是反变的和协变的。
对于getter来说,您所能做的最好的事情就是创建一个新的集合并复制所有元素。你知道它会成功,但你确实需要复制。
对于您的setter,您还需要创建一个新的集合,但在这里您不知道所有的项实际上都是b
对象,所以您需要知道如何处理任何不是的项(您是否忽略了它们、抛出异常或其他什么)。