gpt4 book ai didi

c# - OfType<> 不能很好地与 NHibernate 代理类一起玩

转载 作者:行者123 更新时间:2023-11-30 20:49:52 26 4
gpt4 key购买 nike

我有类似于以下的类:

public abstract class Base { }
public class Concrete : Base { }
public class Cement : Base { }

和下面的代码

var bases = someEntity.Bases; // returns two Concrete and once Cement

// bases now contains:
// - ProxyBase : Base
// - Concrete : Base
// - Cement : Base

var concretes = bases.OfType<Concrete>();

// concretes only contains one Concrete (i.e. the ProxyBase is ignored)

如何在不使用 NHibernate 知识污染我的类的情况下获得两个 Concrete 的预期结果?

如果可能的话,我也不想强制映射不使用延迟加载。

最佳答案

这绝对是动态代理的痛点。您可以向基类添加一个 Self 属性,以便您可以获得对未代理对象的引用:

public virtual Base Self
{
get { return this; }
}

然后通过检查类型就可以得到某个类型的具体类:

var concretes = bases.Where(b => b.Self is Concrete);

您还可以创建一个扩展方法,以便 OfType 的行为符合预期:

public static IEnumerable<T> OfType<T>(this IEnumerable<Base> bases) where T : Base
{
return Enumerable.OfType<T>(bases.Select(b => b.Self));
}

关于c# - OfType<> 不能很好地与 NHibernate 代理类一起玩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23018444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com