使用 Linq 查询进行区分

发布于 2024-10-20 15:59:11 字数 573 浏览 1 评论 0原文

每个 InfringementEntity 都有一个类型。

foreach (InfringementEntity ie in _infCol.InfCollection.Select(r=>r).Distinct())
{
    InfringementLodgementEntity.InfringementCollection.InfCollection.Add(ie);
}

InfringementLodgementCollection.InfringementLodgementEntities
    .Add(InfringementLodgementEntity);

我需要选择所有不同类型的侵权实体并将它们插入到新的 InfringementLodgementEntity 中。然后将此 InfringementLodgementEntity 添加到 InfringementLodgementCollection 中。

问题是我如何选择不同类型的 InfringementLodgementEntity 将它们添加到新的 InfringementLodgementEntity 中。

Every InfringementEntity has a type.

foreach (InfringementEntity ie in _infCol.InfCollection.Select(r=>r).Distinct())
{
    InfringementLodgementEntity.InfringementCollection.InfCollection.Add(ie);
}

InfringementLodgementCollection.InfringementLodgementEntities
    .Add(InfringementLodgementEntity);

I need to select all Infringement Entity with a different type and insert them in a new InfringementLodgementEntity. And then add this InfringementLodgementEntity in InfringementLodgementCollection.

Question is how would I select infringementEntity with different types add them in a new InfringementLodgementEntity.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

碍人泪离人颜 2024-10-27 15:59:11

您应该实现 IEqualityComparer检查类型,并使用 Distinct 接受此类比较器的重载。

You should implement an IEqualityComparer<InfringementEntity> checking for the type, and use the Distinct overload that is accepting such a comparer.

口干舌燥 2024-10-27 15:59:11

如果我理解您的问题,您可以使用 OfType()

var theInfringementEntitiesYouWant =  _infCol.InfCollection.OfType<TheTypeYouWant>().Distinct();

我遗漏了 .Select(r=>r) 因为它没有做任何有用的事情。

If I understand your question, you can use OfType().

var theInfringementEntitiesYouWant =  _infCol.InfCollection.OfType<TheTypeYouWant>().Distinct();

I left out .Select(r=>r) because it wasn't doing anything useful.

生生漫 2024-10-27 15:59:11
public abstract class BaseClass
{

    private Type _classType;
    public Type ClassType
    {
        get
        {
            return _classType;
        }
        set
        {
            _classType= value;
        }
    }

    public abstract Type GetType();
}   

public class InheritedClass: BaseClass
{

    public override Type GetType()
    {
        if (ClassType == null)
        {
            ClassType = typeof(InheritedClass);//ie SingleInfringement or DblInfringment
        }
        return ClassType;
    }
}

我发现处理这个问题的最简单方法就是在基类中使用一个抽象方法 GetType() ,根据定义,该方法必须在继承类中重写。

反射相当昂贵,在大多数情况下应谨慎使用。因此,当我们使用它时,我们只存储反射的结果。

然后,这使我们能够执行以下操作:

var entities = _infCol.InfCollection.Where(w => w.GetType() == typeof(DesiredType) );

从这里您可以执行您想要的操作,批量插入到另一个集合中或其他任何操作。

public abstract class BaseClass
{

    private Type _classType;
    public Type ClassType
    {
        get
        {
            return _classType;
        }
        set
        {
            _classType= value;
        }
    }

    public abstract Type GetType();
}   

public class InheritedClass: BaseClass
{

    public override Type GetType()
    {
        if (ClassType == null)
        {
            ClassType = typeof(InheritedClass);//ie SingleInfringement or DblInfringment
        }
        return ClassType;
    }
}

The simplest way I've found to deal with this is just have an abstract method GetType() in your base class which by definition must be overridden in your inherited class.

Reflection is rather expensive and should be used sparingly in most cases. So when we do use it we just store the result of our reflection.

This then allows us to do:

var entities = _infCol.InfCollection.Where(w => w.GetType() == typeof(DesiredType) );

from here you can do what you want, a bulk insert into another collection or whatever.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文