[英]Distinct using Linq query
每个InfringementEntity都有一个类型。
foreach (InfringementEntity ie in _infCol.InfCollection.Select(r=>r).Distinct())
{
InfringementLodgementEntity.InfringementCollection.InfCollection.Add(ie);
}
InfringementLodgementCollection.InfringementLodgementEntities
.Add(InfringementLodgementEntity);
我需要选择所有具有不同类型的侵权实体并将其插入新的InfringementLodgementEntity中。 然后在InfringementLodgementCollection中添加此InfringementLodgementEntity。
问题是如何选择不同类型的infringementEntity,将它们添加到新的InfringementLodgementEntity中。
您应该实现IEqualityComparer<InfringementEntity>
检查类型,并使用接受这种比较器的Distinct
重载。
如果我理解您的问题,则可以使用OfType() 。
var theInfringementEntitiesYouWant = _infCol.InfCollection.OfType<TheTypeYouWant>().Distinct();
我省略了.Select(r=>r)
因为它没有做任何有用的事情。
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) );
从这里您可以做您想做的事情,可以将其大量插入另一个集合中,也可以执行其他操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.