使用Linq查询不同

时间:2011-03-07 10:18:22

标签: c# .net linq linq-to-entities

每个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中。

3 个答案:

答案 0 :(得分:1)

您应该对类型执行IEqualityComparer<InfringementEntity>检查,并使用接受此类比较器的Distinct重载。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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) );

从这里你可以做你想要的,批量插入另一个集合或其他任何东西。