Различаются с помощью запроса Linq - PullRequest
2 голосов
/ 07 марта 2011

Каждый объект нарушения имеет тип.

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

InfringementLodgementCollection.InfringementLodgementEntities
    .Add(InfringementLodgementEntity);

Мне нужно выбрать все Объект-нарушитель другого типа и вставить их в новый объект-объект-нарушитель. А затем добавьте этот объект InfringementLodgementEntity в коллекцию InfringementLodgementCollection.

Вопрос заключается в том, как бы я выбрал объект защиты от нарушений различными типами, добавив их в новый объект нарушения.

Ответы [ 3 ]

1 голос
/ 07 марта 2011

Необходимо реализовать проверку типа IEqualityComparer<InfringementEntity> и использовать перегрузку Distinct, которая принимает такой компаратор.

0 голосов
/ 18 марта 2011
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) );

отсюда вы можете делать то, что вы хотите, массовая вставка вдругая коллекция или что-то еще.

0 голосов
/ 07 марта 2011

Если я понимаю ваш вопрос, вы можете использовать OfType () .

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

Я пропустил .Select(r=>r), потому что он не делал ничего полезного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...